virtual:虚方法,父类实现提供子类override和new。
override:重写,子类可以重写父类的virtual function,子类调用就是自己重写的函数,父类也是调用子类的重写函数。
new:新的一个,子类直接创建一个名字和父类的virtual function名字一样的方法,子类调用是自己new function ,父类调用的是自己virtual function。
子类初始化调用顺序:会先调用父类的构造函数,然后再调用子类的构造函数。
public class A
{
public A()
{
Test();
Console.WriteLine("初始化A");
}
public virtual void Test()
{
Console.WriteLine("A.Test");
}
}
public class B : A
{
public B()
{
Test();
Console.WriteLine("初始化B");
}
public override void Test()
{
Console.WriteLine("B.Test");
}
}
public class C:A
{
public C()
{
Test();
Console.WriteLine("初始化C");
}
public new void Test()
{
Console.WriteLine("C.Test");
}
}
public class Program
{
static void Main(string[] args)
{
//override 重写 子类初始化,会初始化父类的构造函数,然后初始化子类的构造函数。
//子类重写了父类的方法,那么调用的是子类的方法,如果没有重写父类的virtual虚方法,那子类调用的还是父类的方法
B b = new B();
b.Test();
//new 隐藏父类原来的方法,调用的是子类的方法,父类调用的方法还是父类的方法,子类调用的方法是子类的方法,比如父类的构造函数调用父类的virtual function,子类的构造函数调用子类的new function。
C c = new C();
c.Test();
Console.WriteLine( "nihao");
Console.ReadKey();
}
}