zoukankan      html  css  js  c++  java
  • C#中的abstract、virtual、override和new

    梳理一下static、abstract、virtual、override和new之间的关系

    ①static类里的所有成员都应该是static的,且不能被继承,static的方法也不能加abstract或virtual;

      但是在非static类里面的static方法可以在子类中被同名方法覆盖,

    //父类
    public class ClassBase
    {
        public static string A(){return "ClassBase.StaticA";}//父类静态方法
    }
    
    //子类
    public class ClassSon :ClassBase
    {
        public new string A()//使用new来覆盖,否则编译器提示警告,且该方法也可以申明为static
        {
            return "ClassSon.A";
        }
    }

      

    ②abstract的方法和属性必须包含在abstract的类中,abstract的方法不能有方法体,即不能有任何实现,而是在子类中实现,且子类中实现该方法时必须加override;

    //父类
    public abstract class ClassBase
    {
        public abstract string A();//不能包含实现,且必须是抽象类成员
    }
    
    //子类
    public class ClassSon:ClassBase
    {
        public override string A()//必须加override
        {
            return "Son.A";
        }
    }

    ②virtual的方法和属性有方法体,有自己的实现,可以在其子类中使用new或override来重写,其区别如下

    //父类
    public class ClassBase
    {
        public virtual string A()
        {
            return "ClassBase.A";
        }
    }
    
    //使用new的子类
    public class ClassSon1:ClassBase
    {
        public new string A()
        {
            return "ClassSon1.A";
        }
    }
    
    //使用override的子类
    public class ClassSon2:ClassBase
    {
        public override string A()
        {
            return "ClassSon2.A";
        }
    }
    
    //client代码
    public class Client
    {
        static void Main(string[] args)
        {
            ClassBase cb1 = new ClassSon1();
            ClassBase cb2 = new ClassSon2();
            Console.WriteLine(cb1.A());
            Console.WriteLine(cb2.A());
        }
    }

    运行结果为:

    ClassBase.A

    ClassSon2.A

    ③另外,没申明为virtual的方法,也可以在子类中使用new重写,效果跟上面第二点中使用new的效果一样,当然不使用new也可以,不过编译器会给出警告。

  • 相关阅读:
    2019暑假——区域赛真题讲解
    2019暑假杭电训练赛(补题及笔记)
    2019暑假牛客训练赛(补题及笔记)
    网络流——最大流-Dinic算法
    SPFA
    K短路(A*+SPFA)
    从业务架构视角聊聊大型商业银行的转型实践
    互联网 40 岁失业是一个无法打破的魔咒吗
    Hadoop集群中出现的节点有哪些作用
    CDH集群的角色划分
  • 原文地址:https://www.cnblogs.com/ArtofDesign/p/3603318.html
Copyright © 2011-2022 走看看