最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
详解C#用new和override来实现抽象类的重写区别
时间:2022-06-25 07:53:49 编辑:袖梨 来源:一聚教程网
一,抽象的实现
代码如下 | 复制代码 |
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text;
namespaceVirtualdemo { classProgram { staticvoidMain(string[] args) {//BClass A = new BClass(); 抽象类无法被实例 Class1 c =newClass1(); BClass c2 = c; c2.MethodA(); c.MethodA(); c2.MethodB(); c.MethodB(); c2.MethodC(); c.MethodC(); Console.ReadKey(); } } abstractclassBClass //抽象类无法被实例 { publicvirtualvoidMethodA() { Console.WriteLine("BClassA"); } publicvirtualvoidMethodB() { Console.WriteLine("BClassB"); } publicvirtualvoidMethodC() { Console.WriteLine("BClassC"); } } classClass1 : BClass { publicvoidMethodA() { Console.WriteLine("MethodA"); }//如果一个虚函数 在子类中没有通过override关键字,那么这个方法就没有被重写,而是被隐藏了 publicoverridevoidMethodB() { Console.WriteLine("MethodB"); } publicoverridevoidMethodC() {base.MethodC(); } } } |
从上图得出的结果是:
综上:抽象类的虚方法需要被重写,那问题来了重写有两种方式,new和override又有什么区别
二,new和override重写的区别:
代码如下 | 复制代码 |
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text;
namespaceVirtualdemo { classProgram { staticvoidMain(string[] args) { Teacher t =newTeacher(); Student stu = t; stu.Exam(); stu.Say(); t.Say(); Console.ReadKey(); } } publicabstractclassStudent { publicvirtualvoidExam() { Console.WriteLine("学生都要考试"); } publicvoidSay() { Console.WriteLine("我是学生"); } } publicclassTeacher : Student { publicoverridevoidExam() { Console.WriteLine("老师不用考试"); } //public override void Say() //报错,提示没有virtual,无法被重写 //{ // Console.WriteLine("我是老师"); //} publicnewvoidSay() { Console.WriteLine("我是老师"); } } } |
结果显示为:
综上总结:
1、如果基类没有定义虚方法,那子类只能使用new,而不能使用override
2、基类有没有定义虚方法,子类都可以使用new
3、子类使用new并不叫重写,而是子类新创建一个方法,只是新创建的这个方法刚好跟基类中的方法同名
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22