如果委托是不可变的,为什么我可以做x += y这样的事情

本文关键字:我可以 不可变 如果 为什么 | 更新日期: 2023-09-27 18:05:30

阅读 c# In Depth,第2版,第2.1.2节关于组合和删除委托

子标题指出"委托是不可变的"并且"关于它们的任何东西都不能改变"。在下一段中,我们将讨论如何使用

这样的结构
x += y;

其中xy是兼容委托类型的变量。

我不是刚换了x吗?或者当我这样做(即,立即)时,不变性部分处理x何时被处理?

如果委托是不可变的,为什么我可以做x += y这样的事情

这就像在做:

string x = "x";
string y = "y";
x += y;

字符串也是不可变的。上面的代码没有改变字符串对象 -它将x设置为不同的值。

需要区分变量对象。如果类型是不可变的,这意味着在构造了该类型的实例之后,您不能更改该类型实例中的数据。你可以给这种类型的变量一个不同的值。

如果你明白字符串是如何工作的,委派也是如此。这个+=实际上叫做委托。组合,这样:

x += y;

等价于:

x = Delegate.Combine(x, y);

它不会改变x 先前引用的委托对象的任何内容-它只是创建了一个新的委托对象并为x分配了一个指向新委托的值。

你已经改变了x,但没有改变它的值(即它所持有的委托)。

相同
int num = 4;
num += 2;