虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C#编程 > 详解C#用new和override来实现抽象类的重写区别

详解C#用new和override来实现抽象类的重写区别
类别:C#编程   作者:码皇   来源:互联网   点击:

本篇文章主要介绍了详解C 用new和override来实现抽象类的重写区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。

一,抽象的实现

    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 c override重写方法 c