C# 关于引用类型按值传递的有关问题
C# 关于引用类型按值传递的问题
引用类型按值传递时,传递的对象的引用地址,怎么会改变原来对象的引用指向啊!!!
------解决方案--------------------
你理解错了,建议你看看C#书上关于引用是怎么说的!
------解决方案--------------------
在.net里byref是最慢的(而不是最快的)。对于byvalue而言,就是把引用本身传入参数栈就完了。而对于byref而言,在被调用方法执行完了之后,还要把参数的值赋值给调用者变量,所以byref要比byval更慢。
------解决方案--------------------
其实C#平时的传递引用是一个假象。真正的传递引用需要使用ref 或 out
引用对象按值传递的时候,传递的是引用所指向的对象,不能改变原来引用的指向。
------解决方案--------------------
还要把参数的值赋值给调用者变量 --〉 还要把参数的新的引用值赋值给调用者变量(引用)
注意,这不是c/c++。因此byref的概念在.net和在c中完全不同!
------解决方案--------------------
引用类型按值传递时,传递的对象的引用地址,怎么会改变原来对象的引用指向啊!!!
------解决方案--------------------
你理解错了,建议你看看C#书上关于引用是怎么说的!
------解决方案--------------------
在.net里byref是最慢的(而不是最快的)。对于byvalue而言,就是把引用本身传入参数栈就完了。而对于byref而言,在被调用方法执行完了之后,还要把参数的值赋值给调用者变量,所以byref要比byval更慢。
------解决方案--------------------
其实C#平时的传递引用是一个假象。真正的传递引用需要使用ref 或 out
引用对象按值传递的时候,传递的是引用所指向的对象,不能改变原来引用的指向。
------解决方案--------------------
还要把参数的值赋值给调用者变量 --〉 还要把参数的新的引用值赋值给调用者变量(引用)
注意,这不是c/c++。因此byref的概念在.net和在c中完全不同!
------解决方案--------------------
- C# code
class Program { static void Main(string[] args) { MyTest mt = new MyTest(); //引用类型按值传递,传递的是该引用所指向的对象。 Func(mt); //可以改变其值(因为是同一对象),但不能让引用指向新的对象(因为没有传递mt的引用过去) Console.WriteLine(mt.Name);//结果输出:张三 } static void Func(MyTest test) { test.Name = "张三"; test = new MyTest(); test.Name = "李四"; } } class MyTest { public string Name; }