在分配时,委托类型是否与其他引用类型相同?

时间:2014-05-23 12:04:47

标签: c# delegates reference-type

为什么在我们将ref对象分配给另一个ref对象的情况下,以下代码的行为与其他引用类型不同,两个对象都指向内存中的相同位置?它看起来像是发给我的价值副本。

delegate声明:

class Car {
   public delegate void CarEngineHandler(string text); 
   /* ... */
}

Car.CarEngineHandler carHandler1 = PrintText1;
carHandler1 += PrintText2;

Car.CarEngineHandler carHandler2 = carHandler1;
carHandler2 -= PrintText2;
carHandler1("Hello");

输出:

  

从PrintText1打印:您好   从PrintText2打印:Hello

1 个答案:

答案 0 :(得分:4)

代理是不可变的,所以当你运行例如这一行(调用Delegate.Remove):

carHandler2 -= PrintText2;

您创建委托,并将其存储在carHandler2 中,而不是更改现有委托。


为了说明这一点,请看下面的代码,它使用字符串(字符串也是引用类型和不可变的):

String string1 = "Foo";
string1 += "Bar";
String string2 = string1;
string2 += "EvenMorebar";

string2现在为FooBarEvenMorebar,但string1仍为FooBar