我们先看代码和运行结果,代码:
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。

