一个MFC应用程序包含了类CWinApp 的派生类的单一的实例,该派生类重载了诸如InitInstance 和ExitInstance 这样的方法,用来实现同应用程序相关的特定行为。MFC
库提供了对WinMain 方法的实现,该方法可以找到类CwinApp派生出来的对象,并可以对该对象调用诸如InitInstance, Run 和ExitInstance这样的方法。WinForms
Application 类是个密封类。
在C#中,一个密封类是不能拥有派生类的。对一个类进行密封,可以防止该类被其它类继承,并且可以在调用虚拟方法时有机会进行优化。类Application
提供了静态方法,如Run方法,用来管理应用程序。所以,无论是派生还是重载,应用程序的初始化和终止代码分别放在调用Run的之前和之后。
new运算生成了GreeterForm类的一个新对象, 并调用GreeterForm 构造函数(第17行)来初始化该对象。该构造函数调用InitializeComponent方法。在Visual
Studio.NET中,Windows表单设计向导可以交互式地创建表单, 你可以选取控件,在表单中作图,这个工作类似于在Visual C++ 6.0中使用Dialog
Editor。不同的是,在Visual C++ 6.0中添加的是资源,在C#中,添加到表单类中的是数据成员,即C#中的域(第12-15行),并且添加代码到InitializeComponent
中,用于创建每个控件,并且设置控件的属性。同时,也定义了表单控件的容器, 在InitializeComponent 中,把每个控件的引用也添加到容器中。可以生成容器和控件中的数据成员的类型的完整的限定名称。
一旦添加了诸如按钮这样的控件之后,你就可以双击该控件,加入事件句柄。GreeterForm.greeting_Click 方法处理greeting 按钮所产生的点击事件。注意到该类中没有类似于信息映射机制的实现,现在你要问:事件句柄是如何同点击按钮事件联系起来的?答案是:事件句柄是通过代表同事件联系的。
通过定义类的一个称为事件的成员,一个C#类可以定义该事件可以发出的通知。System.WinForms.Button 定义了一个点击事件:
public event EventHandler Click;
每次点击按钮时,按钮对象就会生成或者发送Click 事件。把EventHandler 代表的实例添加到按钮的Click 事件中,就可以把 greeting_Click
事件处理句柄同点击按钮事件联系起来(第50行)。 一个代表用来封装对一个类的方法的引用,被封装的该方法既可以是静态的,也可以是实例方法。因为greeting_Click
是GreeterForm的实例方法,EventHandler 代表既封装了对GreeterForm 对象的引用,也封装了对greeting_Click
方法的引用。 |