调用另一个类的事件

时间:2013-12-25 02:52:47

标签: c# events

我是C#的新手和编程,我正试图弄清楚如何使用事件。以前我一直使用ActionScript3进行编程,如果你想创建自己的事件,事件是你继承的特殊类,然后任何其他类都可以调用该事件。

使用C#,我试图做类似的事情,如下:

public class EventManager
{
    public delegate void TempDelegate();
    public static event TempDelegate eSomeEvent;
}

public class SomeOtherClass
{
    //doing some stuff, then:
    if (EventManager.eSomeEvent != null)
    {
        EventManager.eSomeEvent();
    }
}

这给了我一个编译器错误CS0070:事件'EventManager.eSomeEvent'只能出现在+ =或 - =的左侧(除非在'EventManager'类型中使用)

msdn上有关此错误的信息表示我应该使用+=而不是尝试调用该事件,但我真的不明白这一点。我不是要尝试从SomeOtherClass订阅任何事件到事件委托,我只是试图调用此事件,以便它开始执行那些已经订阅该事件的函数。

这样可以这样做吗?如果没有,是否可以从另一个类调用一个类的事件?我只想在我的类中重用某些事件,而不是在多个类中创建许多类似的事件。

对此有任何建议将不胜感激!

2 个答案:

答案 0 :(得分:3)

您可以将事件调用包装在公共方法中,并使用其他类中的事件。

public void OnSomeEvent()
{
    var handler = eSomeEvent;
    if (handler != null) handler(this, null);
}

但是,如果您确定该事件应该与触发它的类别不同,那么您可能希望再次查看该设计。

答案 1 :(得分:1)

嗯,典型的解决方案是将eSomeEvent调用放入EventManager

public class EventManager
{
    public delegate void TempDelegate();
    public static event TempDelegate eSomeEvent;

    // Not thread safe as well as your code
    // May be internal, not public is better (if SomeOtherClass is in the same namespace) 
    public static void PerformSomeEvent() {
      if (!Object.ReferenceEquals(null, eSomeEvent)) 
        eSomeEvent(); // <- You can do it here
    }
}

public class SomeOtherClass
{
    //doing some stuff, then:
    EventManager.PerformSomeEvent();
}