Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
事件处理程序访问修饰符MFC与C#WinForms_C#_Winforms_Mfc - Fatal编程技术网

事件处理程序访问修饰符MFC与C#WinForms

事件处理程序访问修饰符MFC与C#WinForms,c#,winforms,mfc,C#,Winforms,Mfc,我最近一直在开发MFC和C#Windows窗体应用程序,我注意到自动生成的事件处理程序上的访问修饰符之间存在差异 在MFC中 public: afx_msg void OnBnClickedOk(); 以C#Win的形式 private void button1_Click(object sender, EventArgs e) 所以我的问题是,为什么事件处理程序在MFC中被声明为公共的,尽管C#方式在技术上更好,因为它促进了封装(这可能是它被更改的原因) 谢谢我做MFC已经有一段时间了 归

我最近一直在开发MFC和C#Windows窗体应用程序,我注意到自动生成的事件处理程序上的访问修饰符之间存在差异

在MFC中

public:
afx_msg void OnBnClickedOk();
以C#Win的形式

private void button1_Click(object sender, EventArgs e)
所以我的问题是,为什么事件处理程序在MFC中被声明为公共的,尽管C#方式在技术上更好,因为它促进了封装(这可能是它被更改的原因)


谢谢

我做MFC已经有一段时间了

归根结底,C#和MFC发送消息的方式是不同的,同样,这两种语言不仅仅是不同的语言,而且是完全不同的平台——因此说一种比另一种“更好”并不正确,特别是因为事件处理方法的可见性。没有什么能阻止您更改C#处理程序的可见性,事实上,在某些情况下,您可能需要这样做才能假调用事件(尽管还有其他更合适的架构方法来实现同样的事情)

通常,表单的控件及其事件在默认情况下是它自己的业务,这非常有意义。同样,关于C#的默认
private
状态的另一个线索是处理程序的签名——如果底层控件是private的,则它们都希望有发送者和事件数据(注意MFC没有),那么就没有理由将其公开或保护,因为外部调用程序无法向事件处理程序提供正确的参数


在这方面,处理程序应该是私有的。

感谢您的详细解释!答案是好的,但我想补充一点,MFC中的事件处理程序不需要是公共的,默认情况下它们是公共的。所有的调用都是通过指向这些方法的指针(MESSAGE_MAP)进行的;我确实记得利用了默认的public,因为您可以将另一个窗口的处理程序连接到消息,这对于复杂的UI来说非常酷