C# 订阅子类中的事件?

C# 订阅子类中的事件?,c#,events,C#,Events,我想我了解C#中的事件。如果您不想直接调用该方法,而不是将其留给自定义实现,则有时会使用它们。但是什么时候 程序员A编写类A,程序员B编写类B。类A应该引发类B注册并响应的事件,但类A对类B用于服务的函数一无所知 你能给我举一个简单的例子吗?这是一个非常基本的例子,能让人明白这一点 当您说“如果您不想直接调用该方法而不是为自定义实现留出空间,则使用它们”,您让我觉得您可能无法完全理解简单委托和事件之间的区别。这里过于简单,但这里有一个简单的解释 委托是一种让使用您的代码编写代码的人提供自己方法的

我想我了解C#中的事件。如果您不想直接调用该方法,而不是将其留给自定义实现,则有时会使用它们。但是什么时候

程序员A编写类A,程序员B编写类B。类A应该引发类B注册并响应的事件,但类A对类B用于服务的函数一无所知


你能给我举一个简单的例子吗?

这是一个非常基本的例子,能让人明白这一点

当您说“如果您不想直接调用该方法而不是为自定义实现留出空间,则使用它们”,您让我觉得您可能无法完全理解简单委托和事件之间的区别。这里过于简单,但这里有一个简单的解释

委托是一种让使用您的代码编写代码的人提供自己方法的方式。因此,它们不通过消息泵,而是同步发生等

事件使用委托为您提供一种方式,让您将自己的代码放入其中以响应事件。事件通过消息泵传递,当您需要响应其他地方可能发生的事情时,事件是适当的。但是,它们将出现在当前正在执行的代码的执行路径之外

令人高兴的是,大多数人似乎凭直觉知道何时使用其中一种。再一次,这里是粗略的简化,但希望足够进一步阅读

public class A
{
    private readonly B _B = new B();

    public class A() 
    {
        _B.MyEvent += MyEventHandler; 
    }

    private void MyEventHandler(object sender, EventArgs e)
    {
        // Handle
    }
}

public class B
{
    public event EventHandler MyEvent;

    // Call this when you raise the event so you don't 
    // need check if MyEvent is null.
    private void OnMyEvent() 
    {
        if (MyEvent != null) // If this is null we have no subscribers.
        {
            MyEvent(this, EventArgs.Empty);    
        }
    }
}