类中的事件可以从类中引发,而不需要额外的方法。
因此,如果MapChangedEventHandler
是一个事件,可以通过以下方式从类内部调用它:
if (MapChangedEventHandler != null)
MapChangedEventHandler( parameters );
我能看到(我不是专家)这些OnWhatever
方法存在的唯一动机是允许from outside
在类中引发事件,或者from some derived class
,因为事件只能从声明类内部引发。
这些OnWhatever
方法必须是一些good practice
(不是规则,也不是编译器规则)。也许他们还会处理一些额外的事情以及举办活动。如果未提供它们,则可能不打算从外部或派生类调用它们。
顺便说一句, MapChangedEventHandler 不是事件。是代表。事件可以是那种类型,但它们的名称是独立的。
像这样:
class TestClass
{
these are the events of the class:
public event MapChangedEventHandler SomeEvent1;
public event MapChangedEventHandler SomeEvent2;
public event MapChangedEventHandler SomeEvent3;
//now this method calls the events (events can only be raised from inside the class)
public void SomeMethod()
{
//do lots of stuff
if (SomeEvent1 != null) SomeEvent1(whatever arguments it takes);
//do other stuff
if (SomeEvent2 != null) SomeEvent2(another arguments);
}
//now, if you want to let derived classes to raise events...
protected void OnSomeEvent3(Same Parameters As MapChangedEventHandler)
{
if (SomeEvent3 != null) SomeEvent3(parameters);
}
}