我发现delegate的行为像值类型,但我想把它们作为引用类型使用。
除了在delegate上封装一个类让它表现为引用类型外,还有什么更好的方法吗?
首先,让我解释一下什么叫 "表现得像值类型"。
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'。
我想你问的是,你是否可以更新一个委派引用,并将其自动反映到另一个委派引用中。你可以--不是 恰恰 的方式,但通过链式事件,你可以为一个事件添加一个处理程序,然后从另一个事件中调用它。
例如,你可以在一个事件中添加处理程序,并让它从另一个事件中调用。
delegate void fun();
event fun A;
event fun B;
void main()
{
A += () => Console.WriteLine("This was added to A");
B += () => Console.WriteLine("This was added to B");
B += () => A(); //Chain the events
A += () => Console.WriteLine("This was added to A after A was already added to B");
Console.WriteLine("Running B()....");
B();
}
Output:
Running B()....
This was added to B
This was added to A
This was added to A after A was already added to B
请注意,最后一行是被发出的,尽管我们从未将它添加到... B
直接。