Aar*_*ide 15 c# events static-members
我刚刚意识到静态事件的存在 - 我很好奇人们如何使用它们.我想知道相对比较如何与静态与实例方法保持一致.例如,静态方法基本上是一个全局函数.但我总是将事件与对象实例联系起来,而我在全球范围内无法思考它们.
这里有一些代码可以参考它是否有助于解释:
void Main()
{
var c1 = new C1();
c1.E1 += () => Console.WriteLine ("E1");
C1.E2 += () => Console.WriteLine ("E2");
c1.F1();
}
// <<delegate>>+D()
public delegate void D();
// +<<event>>E1
// +<<class>><<event>>E2
// +F()
// <<does>>
// <<fire>>E1
// <<fire>>E2
public class C1
{
public void F1()
{
OnE1();
OnE2();
}
public event D E1;
private void OnE1()
{
if(E1 != null)
{
E1();
}
}
static public event D E2;
static private void OnE2()
{
if(E2 != null)
{
E2();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ed *_* S. 45
警惕静态事件.请记住,当一个对象订阅一个事件时,该事件的发布者将持有对该对象的引用.这意味着您必须非常小心地明确取消订阅静态事件,因为它们将使订户永远保持活动,即,您最终可能会遇到内存泄漏的托管等效项.
Ben*_*igt 14
在消息传递方面可以考虑大部分OOP.
方法调用是从调用者到被调用者(携带参数)的消息和带有返回值的消息.
事件是从源到订户的消息.因此可能涉及两个实例,一个发送消息,另一个接收消息.
对于静态事件,没有发送实例(只是一个类型,可能是也可能不是类).仍然可以将接收者实例编码为委托的目标.