【发布时间】:2020-08-12 15:09:26
【问题描述】:
我发现委托的行为类似于值类型,但我想将它们用作引用类型。
有什么办法比将一个类包装在一个委托上以使其表现为引用类型更好?
首先,让我解释一下“表现得像值类型”的含义:
delegate fun void();
void a() { }
void main()
{
fun A;
fun B;
B = A;
A += a;
}
结果显示B 除了A 有a 之外什么都没有。在这里,委托就像int 类型,这样当:
int a = 1;
int B = 0;
int A = 0;
B = A;
A += a;
结果是A == 1 和B == 0。
更具体地说,我想要的是让委托表现得像一个指针,当A 发生变化时,B 也会发生变化。当A += a 时,'B' 也隐含地得到 'a'。
【问题讨论】:
-
委托类型是不可变的,因此它们不能用作引用类型。另外,
A += a实际上是赋值操作,而不是对对象的修改。如果我们以“引用”的方式考虑它,0不会更改为1,A只是分配给1- 一个全新的对象。 -
不确定你在问什么。在任何情况下都不会更新
A持有的引用也不会更新B持有的引用。也许您可以发布一个带有实际引用类型的示例来展示您正在寻找的行为? -
其实,A += a;然后 A() 调用 a() 两次。一个=一个;一个+=b;将调用 a() 和 b()
标签: c# delegates pass-by-reference