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;
}