類中的事件可以在類中引發,而不需要額外的方法。
所以,如果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);
}
}
我明白了。但根據Microsoft編譯器創建用於在類和_上聲明的事件的私有事件變量_編譯器還創建了兩個公共方法add_EventName和remove_EventName。這些方法是事件掛鉤,它允許代理組合或從事件代理eh中移除。這些細節對程序員來說是隱藏的._正如你在_if_中指出的那樣,如果事件不爲null,則會被調用。我懷疑是誰創建了EventHandler。我不知道它是否在Add_Event隱藏方法上創建。 – learner
事件始終以空委託形式開始。處理程序方法是在向事件添加處理程序時創建的:'SomeClass.SomeEvent + = SomeHandler;'。向事件添加處理程序使其不爲空。刪除處理程序時:'SomeClass.SomeEvent - = SomeHandler;' –
是的。問題是LayoutAwarePage類沒有任何這種註冊事件。正因爲如此,我無法理解這個事件到現在爲止。 – learner