[英]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.