一,笼统的完成
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Virtualdemo { class Program { static void Main(string[] args) {//BClass A = new BClass(); 笼统类没法被实例 Class1 c = new Class1(); BClass c2 = c; c2.MethodA(); c.MethodA(); c2.MethodB(); c.MethodB(); c2.MethodC(); c.MethodC(); Console.ReadKey(); } } abstract class BClass //笼统类没法被实例 { public virtual void MethodA() { Console.WriteLine("BClassA"); } public virtual void MethodB() { Console.WriteLine("BClassB"); } public virtual void MethodC() { Console.WriteLine("BClassC"); } } class Class1 : BClass { public void MethodA() { Console.WriteLine("MethodA"); }//假如一个虚函数 在子类中没有经由过程override关键字,那末这个要领就没有被重写,而是被隐蔽了 public override void MethodB() { Console.WriteLine("MethodB"); } public override void MethodC() { base.MethodC(); } } }
从上图得出的效果是:
综上:笼统类的虚要领需要被重写,那题目来了重写有两种体式格局,new和override又有什么区分
二,new和override重写的区分:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Virtualdemo { class Program { static void Main(string[] args) { Teacher t = new Teacher(); Student stu = t; stu.Exam(); stu.Say(); t.Say(); Console.ReadKey(); } } public abstract class Student { public virtual void Exam() { Console.WriteLine("门生都要测验"); } public void Say() { Console.WriteLine("我是门生"); } } public class Teacher : Student { public override void Exam() { Console.WriteLine("先生不必测验"); } //public override void Say() //报错,提醒没有virtual,没法被重写 //{ // Console.WriteLine("我是先生"); //} public new void Say() { Console.WriteLine("我是先生"); } } }
效果显现为:
综上总结:
1、假如基类没有定义虚要领,那子类只能运用new,而不能运用override
2、基类有无定义虚要领,子类都可以运用new
3、子类运用new并不叫重写,而是子类新创建一个要领,只是新创建的这个要领恰好跟基类中的要领同名
以上就是详解C#用new和override来完成笼统类的重写区分的内容,更多相关内容请关注ki4网(www.ki4.cn)!