假设我有一个有静态事件的类。此活动由三个或更多不同的类订阅。 [让我们说4]
现在当一些值得注意的事情发生时,课堂上的事件被提升了。
当4个不同的类订阅该事件时,它们中的相应处理程序执行它们各自的代码。
现在,如果我不想要我的班级的处理程序代码3& 4执行。我该怎么办?
请帮忙。 在此先感谢!
答案 0 :(得分:0)
您希望处理程序在什么条件下开火?
您可以使用以下模式,该模式将提供一种机制来防止处理程序根据唯一标识符触发。
在这个例子中,我创建了一些简单的事件参数,事件将用于告诉处理程序一个唯一的标识符(Guid):
public class MyEventArgs : EventArgs { public Guid Identifier { get; set; } }
然后,创建一个简单的类来引发事件:
public class EventGenerator
{
public EventHandler<MyEventArgs> TheEvent;
public void RaiseEvent(Guid identifier)
{
if (TheEvent != null)
TheEvent(this, new MyEventArgs(){Identifier = identifier});
}
}
最后,您可以拥有一个类(任意数量的这些),它们都将订阅该事件,但只会在事件args提供不同的标识符时运行它:
public class TheClass
{
private readonly Guid _identifier;
private EventGenerator _eventGenerator;
// The constructor is given the event generator class instance
public TheClass(EventGenerator evGen)
{
// create a unique identifier for the class
_identifier = Guid.NewGuid();
// subscribe to the event
_eventGenerator = evGen;
_eventGenerator.TheEvent += TheEvent;
}
private void TheEvent(object sender, MyEventArgs e)
{
// when the event fires, check the Guid and if it isn't a match, don't continue ...
if (e.Identifier == _identifier) return;
// rest of the handler goes here ...
}
}
然而,这只是一个例子 - 你可能需要一些不同的东西,只需在选择时取消订阅该事件即可实现。这取决于我最初问题的答案。