【IT168技术文档】
输出结果为:using System; class A { public void show() { Console.WriteLine("A.show"); } public virtual void play() //定义为“virtual”,表明可以过载,不能过载非虚函数 { Console.WriteLine("A.play"); } } class B : A { public void show() //覆盖(隐藏)A中的show方法,不加“show”,会编译警告 { Console.WriteLine("B.show"); } public override void play() //过载A中的play方法,如果不加“override”,警告。 { Console.WriteLine("B.play"); } } class C : A { new public void show() //隐藏A中的show方法,加“show”,不会编译警告 { Console.WriteLine("C.show"); } new public void play() //隐藏A中的play方法,但是不构成过载,相当于另一个方法 { Console.WriteLine("C.play"); } } class D { public static void Main(string[] args) { A a = new A(); B b = new B(); C c = new C(); a.show(); a.play(); b.show(); b.play(); c.show(); c.play(); a = b; a.show(); a.play(); a = c; a.show(); a.play(); } }
A.show
A.play
B.show
B.play
C.show
C.play
A.show
B.play
A.show
A.play
override 的方法必须是:被声明为virtual的方法,其中可以过载,也可以不过载;被声明为abstract的方法,必须被override方法过载。过载之后可以实现多态性-动态联编。
new:声明的方法用于隐藏基类中声明的同名函数,它与基类中的同名函数没有任何关系,仅仅同名而已。与多态无关。
overload:重载,就是定义不同签名的同名方法,也是多态性的一种表现。