MSDN官方解释:The implementation of a virtual member can be changed by an overriding member in a derived class.
意思就是虚类可以被重写覆盖
Version with the Override and New Keywords
地址连接:https://msdn.microsoft.com/en-us/library/6fawty39.aspx
虚类是存在于基类跟子类之间。在C#里基类的成员在子类里是可用的,并且不会出现不希望的错误。在子类里要明确写出是继承的哪个类要重写的是哪个方法。
在C#里,子类可以使用跟父类一样的方法名。
1.基类的方法必须定义为虚类(virtual)
2.如果这个方法在子类里没有加上关键字new或者override,会警告warning而且会当做new关键字来
处理
3.如果这个方法在子类里被new修饰,这个方法将被当做主类的独立的方法。
4.如果这个方法在子类里被override修饰,子类将把这个方法代替基类里的这个方法
5.override,virtual和new关键词也能被当做属性,索引和事件
例子:
class Father{
public void F() {
Console.WriteLine("A.F");
}
<span style="color:#CC33CC;"> public virtual void G() {
Console.WriteLine("A.G");
}</span>
}
class Son: Father{
new public void F() {
Console.WriteLine("B.F");
}
<span style="color:#FF0000;"> public override void G()
{
Console.WriteLine("B.G");
}</span>
}
class Program
{
static void Main(string[] args)
{
Son b = new Son();
Father a = b;
a.F();
b.F();
a.G();
b.G();
Console.ReadKey();
}
}
结果
:
class Son: Father{
new public void F() {
Console.WriteLine("B.F");
}
<span style="color:#FF0000;"> public void G()
{
Console.WriteLine("B.G");
}</span>
}
结果:
class Son: Father{
new public void F() {
Console.WriteLine("B.F");
}
<span style="color:#FF0000;"> new public void G()
{
Console.WriteLine("B.G");
}</span>
}
结果:
其他相关网站:https://msdn.microsoft.com/en-us/library/9fkccyh4.aspx