【发布时间】:2022-01-21 03:19:31
【问题描述】:
给定以下代码:
public class A
{
public event Action SomethingChangedA = null;
public void Trigger()
{
SomethingChangedA?.Invoke();
}
}
public class B
{
public A a;
public event Action SomethingChangedB = null;
public B()
{
a = new A();
//First approach
a.SomethingChangedA += SomethingChangedB;
//Second approach
a.SomethingChangedA += () => SomethingChangedB?.Invoke();
}
}
public class C
{
public B b;
public C()
{
b = new B();
b.SomethingChangedB += DoSomethingOnC;
}
public void DoSomethingOnC()
{
Console.WriteLine("Something!");
}
}
如果我打电话:
C c = new C();
A a = c.b.a;
a.Trigger();
我的第一个想法是输出将是“Something”2次,但事实是第一种方法没有被调用。
经过一番思考,在我看来是有道理的:
a.SomethingChangedA += SomethingChangedB;
不是在调用某些东西,而是只是在为操作保留的内存的...引用中分配?
我以为我知道发生了什么以及为什么会发生这种情况,但我不够聪明,无法向另一个人解释......所以我可能真的不知道为什么会发生这种情况。
所以我有两个问题:
- 我该如何解释为什么会发生这种情况?
- 什么类型的案例会在动作中使用这种assign方法 另一个动作?
【问题讨论】:
标签: c# events event-handling action