如果委托是不可变的,为什么我可以做x += y这样的事情
本文关键字:我可以 不可变 如果 为什么 | 更新日期: 2023-09-27 18:05:30
阅读 c# In Depth,第2版,第2.1.2节关于组合和删除委托
子标题指出"委托是不可变的"并且"关于它们的任何东西都不能改变"。在下一段中,我们将讨论如何使用
这样的结构x += y;
其中x
和y
是兼容委托类型的变量。
我不是刚换了x
吗?或者当我这样做(即,立即)时,不变性部分处理x
何时被处理?
这就像在做:
string x = "x";
string y = "y";
x += y;
字符串也是不可变的。上面的代码没有改变字符串对象 -它将x
设置为不同的值。
需要区分变量和对象。如果类型是不可变的,这意味着在构造了该类型的实例之后,您不能更改该类型实例中的数据。你可以给这种类型的变量一个不同的值。
如果你明白字符串是如何工作的,委派也是如此。这个+=实际上叫做委托。组合,这样:
x += y;
等价于:
x = Delegate.Combine(x, y);
它不会改变x
先前引用的委托对象的任何内容-它只是创建了一个新的委托对象并为x
分配了一个指向新委托的值。
你已经改变了x
,但没有改变它的值(即它所持有的委托)。
与
相同int num = 4;
num += 2;