2012-03-21 98 views
0

我最近一直在開發MFC和C#Windows窗體應用程序,我注意到自動生成的事件處理程序上的訪問修飾符之間的區別。事件處理程序訪問修飾符MFC vs C#WinForms

在MFC

public: 
afx_msg void OnBnClickedOk(); 

在C#贏表單

private void button1_Click(object sender, EventArgs e) 

所以我的問題是,爲什麼是事件處理程序在MFC中聲明爲public,我會雖然C#的方式是在技術上更好它促進封裝(這也許是爲什麼它被改變了)。

感謝

回答

1

它一直以來我做MFC一段時間...

最終的方式,C#和MFC調度信息是不同的,同樣這兩者並不只是不同的語言,但完全不同的平臺 - 因爲僅僅是因爲事件處理方法的可見性,所以說一個比另一個更好,尤其是是不正確的。沒有什麼能阻止你改變C#處理程序的可見性,事實上,在某些情況下,你可能需要爲了僞造一個事件(儘管還有其他更適當的架構方式來實現相同的事情)。

通常情況下,表單的控件及其事件默認情況下都是自己的業務,這非常合理。同樣,關於C#的默認private立場的另一個線索是在處理程序的簽名中 - 它們都期望發件人和事件數據(請注意MFC不) - 如果底層控件是私有的,那麼沒有理由公開它或者受到保護,因爲外部調用者無法向事件處理程序提供正確的參數。

在這方面,處理程序是私人的。

+0

感謝您的詳細解釋! – TomP89 2012-03-21 22:51:33

+0

答案很好,但我想補充一點,MFC中的事件處理程序不需要公開,它們是默認公開的。所有的調用都是通過指向這些方法的指針(MESSAGE_MAP)發生的。 – 2012-04-02 16:21:35

+0

Léo - 是的,我確實知道使用了一個函數指針表 - 我認爲可見性並不重要(但我不想說因爲它已經有一段時間了);我確實記得利用默認公共的優勢,然後將另一個窗口的處理程序連接到一條消息,這對於複雜的UI來說很酷 – 2012-04-02 16:26:40