黑马程序员训练营--浅谈c#中值传递和引用传递
来源:互联网 发布:js unicode编码转换 编辑:程序博客网 时间:2024/06/06 02:29
---------------------- Windows Phone 7手机开发、.Net培训 期待与您交流! ----------------------
c#中都有哪些值类型哪些引用类型?
C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
值类型和引用类型的含义是什么?
值传递:传的是对象的值拷贝。(即函数内参数对象是调用时传递的对象的栈中对象的拷贝。)
引用传递:传的是栈中对象的地址。(即函数内参数对象与调用时传递的对象完全是同一栈中对象。)
以值传递参数
当实参当作值来传递时,就产生了一个新的拷贝。
这时候x和p是两个不同的内存空间,将x的值拷贝一份传到p这个命名空间中,这时候p这个内存空间就跟x的内存空间的值相同的,但也仅此而已,他们两个并没有关系!当程序员改变p内存空间的值的时候,由于x和p不在同一个内存空间中,所以这时候x内存空间的值并不会改变!
通俗点说,一张农行的银行卡和一张建行的银行卡,里面都有100元钱,这时候你往建行里面存一百块钱,农行里面的余额还是100元!
class Test
{
static void Main(string[] args)
{
int x=8;
Fo(x);
Console.WriteLine("x={0}", x);
}
static void Fo(int p)
{
p = p + 1;
Console.WriteLine("p={0}", p);
}
}
执行结果为:p=9 x=8
以引用传递参数
使用ref关键字时,表示是用引用的方式传递参数,实参和形参都是同一个对象,改变其中一个值,另一个值也会改变
下面这个例子,将x的内存空间地址,传给p,这时候x和p公用一个内存空间,当程序员在Fo方法里改变了这个内存空间的值,那么,x的值也会随着改变
通俗点说,你有一张农行的银行卡和一张与之关联的存折,这时候你往银行卡里存了一百块钱,然后拿着存折去查看余额,你会发现存折里也增加了100元,这就是说银行卡跟存折的数据在一个内存中,改变任意一个,另一个也会改变!
static void Main(string[] args)
{
int x = 8;
Fo(ref x);
Console.WriteLine("x={0}", x);
}
static void Fo(ref int p)
{
p = p + 1;
Console.WriteLine("p={0}", p);
}
执行结果为:p=9 x=9
两个通俗的例子如有不足之处,请指正,谢谢!
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/
- 黑马程序员训练营--浅谈c#中值传递和引用传递
- 黑马程序员_java中值传递和引用传递区别
- C#中值传递和引用传递
- java中值传递 和 引用传递
- java中值传递和引用传递
- java中值传递和引用传递辨析
- Java中值传递和引用传递问题
- java中值传递和引用传递
- Java中值传递和引用传递
- java中值传递和引用传递
- java中值传递和引用传递
- Java中值传递和引用传递实例
- JavaScript中值传递和引用传递
- Java中值传递和引用传递
- java中值传递和引用传递
- Python中值传递和引用传递区别
- Python中值传递和引用传递区别
- C++中值传递、指针传递和引用传递的比较
- 马士兵设计模式讲座总结(1)
- Redis作者谈Redis应用场景
- 定义一个满足如下要求的Date类
- top详解
- Intel MIC架构
- 黑马程序员训练营--浅谈c#中值传递和引用传递
- sqlserver查看缓存中数据页面和索引页面
- gcc警告选项
- sshd配置
- object-c的委托模式
- Python模拟Web Fetion给好友发送信息(HTML解析和具体发送模块)
- 12、J2SE基础-字符编码
- 愿景派架构师
- Android短信Receiver优先级