繁体   English   中英

另一类的通话事件

[英]Calling event of another class

我是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订阅事件委托,而是要调用此事件,以便它开始执行那些已经为该事件订阅的函数。

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

任何建议,将不胜感激!

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

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

但是,如果您确实确定该事件应该与触发它的类不在同一类上,则可能需要再次查看该设计。

好吧,典型的解决方案是将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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM