我们先看代码和运行结果,代码:
BaseClass.cs文件:
public class BaseClass { public BaseClass() { Console.WriteLine("Base Constructed Function"); } public virtual void Execute() { Console.WriteLine("Base Virtual Execute Function"); } public virtual void Execute2() { Console.WriteLine("Base Virtual Execute2 Function"); } }
ChildClass.cs文件:
public class ChildClass : BaseClass { public ChildClass() { Console.WriteLine("Children Constructed Function"); } public override void Execute() { Console.WriteLine("Children Execute Function"); } public new void Execute2() { Console.WriteLine("Children Execute2 Function"); } }
Program.cs文件:
class Program { static void Main(string[] args) { #region 直接创建子类对象 ChildClass A = new ChildClass(); A.Execute(); A.Execute2(); #endregion #region 使用父类型引用子类型 BaseClass B = new ChildClass(); B.Execute(); B.Execute2(); #endregion Console.ReadKey(); } }
运行结果:
我们有发现:
C# override,重写,是指对父类中的虚方法(标记virtual)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致,此关键字不可以用于重写非虚方法和静态方法,。
new,隐藏,是指在子类中重新定义一个签名与父类方法相同的方法,父类的同名方法只是被隐藏而未被覆盖,这个方法也可以不显示使用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字new。