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

时间:2012-03-21 22:15:49

标签: c# winforms mfc

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

在MFC中

public:
afx_msg void OnBnClickedOk();

在C#Win Forms中

private void button1_Click(object sender, EventArgs e)

所以我的问题是,为什么事件处理程序在MFC中声明为公共,我认为C#方式在技术上更好,因为它促进了封装(也许是为什么它被更改)。

由于

1 个答案:

答案 0 :(得分:1)

我做MFC已经有一段时间......

最终C#和MFC发送消息的方式不同,同样这两种语言不仅仅是不同的语言,而是完全不同的平台 - 所以说一个人比另一个人“更好”并不正确,特别是仅仅是因为事件处理方法的可见性。没有什么可以阻止你改变C#处理程序的可见性,事实上在某些情况下你可能需要为了伪造一个事件(尽管还有其他更合适的方法来实现同样的事情)。

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

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