ref和不加ref不等价,他们的区别在这里
来源:互联网 发布:通达信现货看盘软件 编辑:程序博客网 时间:2024/05/16 19:41
ref和不加ref不等价,他们的区别在这里:
public class MyClass
{
public static void Main()
{
Hashtable ht = new Hashtable();
ht["abc"] = 1;
Console.WriteLine(ht.Count);
myFunction(ht);
Console.WriteLine(ht.Count);
myRefFunction(ref ht);
Console.WriteLine(ht.Count);
}
public static void myFunction(Hashtable ht)
{
ht = new Hashtable();
}
public static void myRefFunction(ref Hashtable ht)
{
ht = new Hashtable();
}
}
猜一下输出的结果是什么吧。
不加ref的参数传递是by value的方式,如果是一个引用类型那么传递的是一个指针,也就是把对象的指针复制了一份传递给函数的参数,两个指针指向同一个对象,因此对他们的修改是对同一个对象的修改。
但是在myFunction中重新建立了一个对象,实际上是修改了hashtable对象指针的一个副本,原来的那个hashtable并没有受到影响。
加了ref就是按引用传递了,自是之中都只有一个指针,也指向同一个对象,对这个指针进行的操作自然是会影响原来的那个对象。因此在myRefFunction中改变了传递过来的指针的值,在最初的掉用函数中的原来的指针也改成了新建的对象。
因此输出结果是
1
1
0
- ref和不加ref不等价,他们的区别在这里
- C#引用类型参数加ref或out与不加ref或out的区别
- C#中参数为引用类型加ref和不加的区别
- C#中函数参数的形参和实参即加ref 或加 out 与全部不加
- 引用类型参数使用ref与不使用ref的区别
- ref和out的区别
- ref 和 out 的区别
- out和ref的区别
- ref和out的区别
- ref和out的区别
- ref和out的区别
- ref 和 out 的区别
- Ref和Out的区别
- out和ref的区别?
- ref和out的区别
- out和ref的区别
- ref 和out的区别
- ref和out的区别
- 拯救程序员
- 让你的软件支持繁体中文
- 爱情出轨的比喻
- C Standard Library
- 发现一个集成QQ和MSN的好软件。
- ref和不加ref不等价,他们的区别在这里
- 赐各样安慰的神
- 怎么缩小ms sql 的日志
- 记我的中学生活
- 存储过程调试过程中DATETIME参数的输入故障解决方法
- JAVA环境变量设置
- 九江第二天
- 为什么应该更重视无线网络安全性
- 软件教父马丁.福勒的心灵鸡汤