override
- override是派生类用来重写基类方法的。调用的派生类方法,如需调用基类方法用base关键字
- override不能重写非虚方法或静态方法。
- override重写必须用abstract、override、virtrual修饰的方法。
new
- new 是派生类用来隐藏基类方法的,在派生类中看不到基类方法,但调用的还是基类的方法。
- 如果在派生类中要隐藏基类方法而不用new关键字,而不用new关键字,编译时会出现一个警告,提示如果是要隐藏基类中的方法,请使用new关键字。
- new可以隐藏基类中的普通方法也可以是虚方法。
- 如果在派生类中用private来修饰new 方法,那么只在该派生类中隐藏了基类中的方法,在该派生类之外,相当于没有隐藏基类中的方法;
- 如果在派生类中隐藏了基类中的方法,在该派生类的派生类中,将延续对该派生类对基类方法的隐藏。
public class Program { static void Main(string[] args) { A a = new A(); a.Test(); B b = new B(); b.Test(); A c = new B(); c.Test(); A d = new C(); d.Test(); Console.ReadLine(); } } public class A { public virtual void Test() { Console.WriteLine("A Test()"); } } public class B : A { private new void Test() { Console.WriteLine("b Test()"); } } public class C : B { public override void Test() { Console.WriteLine("C Test()"); } }
时间: 2024-10-14 20:25:34