我们使用继承,也要允许派生类中的某些属性或方法有与基类不同的行为,我们想‘重写’它,但基类同意才能重写,否则就会发生命名冲突了。
1。Overridable
在基类中用Overridable修饰符来标识允许基类中的属性或方法在其派生类中被重写,没有标识的其实就是默认为有NotOverridable修饰符来隐式地标识,用于提醒编译器该属性或方法不可被重写;
2。Overridable
然后在派生类重写时,我们就用Overrides修饰符来标识哪些是重写自基类中定义的 Overridable 属性或方法。”
在派生类中重写基类的函数,其函数的返回值只是派生类的返回值,而不是基类的返回值,基类的值则被重写过了。如基类的函数gety的返回值为4,而派生类中gety的返回值为14,当程序运行后,实例化对象,例如obj.gety=14.
3。New
new构造函数一般用于打开文件、连接到数据库、初始化变量以及处理任何需要在可使用对象前完成的其他任务。我们必须在Sub New 构造函数中的第一行代码使用语句 MyBase.New(),来调用类层次结构中该类的基类的构造函数,以获得基类的性质。
4.Sub Finalize
析构则是在Sub Finalize中执行完对派生类的的清理任务,如保存状态信息、关闭文件和与数据库的连接,以及执行在释放对象前必须完成的其他任务之后,在析构函数的最后一句使用语句 MyBase.Finalize() 显式调用其基类的 Sub Finalize 方法,以析构MyBase.New()构造的内容。
5.
派生类的构造函数
Sub New()
MyBase.New() ‘注意:这句话要放在sub内的第一句,调用基类的构造函数
Console.WriteLine("派生类的构造")
End Sub
派生类的析构函数
Protected Overrides Sub Finalize()
Console.WriteLine("派生类的析构")
MyBase.Finalize()
End Sub
从上面的例子知道:1。如果基类没有构造函数方法或者有一个不带参数的sub new过程,就不需要严格地为派生类定义一个显示构造函数。也就是不用写sub new,就可以直接用new方法来创建实例对象。
上面当基类没有隐式或者显式包括一个无参数的构造函数方法时,派生类必须包含一个构造函数方法,并且改方法的第一个可执行的行必须时对基类构造函数的调用,如上面的 MyBase.New() 。
4