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也可以,不过编译器会给出警告。

  • 相关阅读:
    AngularJS 学习 (一)Start
    div固定位置,不随滚动条滚动
    两个单例小程序
    java实现人脸识别V3版本开发
    flex>行为和特效 小强斋
    flex>导航 小强斋
    flex>定位和布局 小强斋
    flex>菜单设计 小强斋
    flex>其他交互设计 小强斋
    flex>菜单设计 小强斋
  • 原文地址:https://www.cnblogs.com/ArtofDesign/p/3603318.html
Copyright © 2011-2022 走看看