C#关键字理解(2)

## 8、sealed ##
对类使用  表示当前类不能被继承
## 9、base ##
助于子类调用基类的构造函数,与this关键字串联构造函数语法类似
如:
    `public con(int a,int b):base(a)
    {
       this.b = b;
    }`
## 9、virtual  override ##
(1)用于多态;
(2)如果基类定义了希望子类重写的方法,必须用virtual关键字来标志;
(3)virtual sealed一起用之后,则子类中不能用override重写了;
(4)如果一个方法标记为virtual,则这个方法的默认实现会被所有派生类继承,子类可以重写,但这不是必须的;
## 10、abstract ##
(1)对于类:抽象类不能实例化; 
(2)当希望定义没有提供实现而必须在派生类中实现的方法时 可以使用抽象成员;
(3)如果一个方法标记了abstract,则其派生类必须重写override该方法,与virtual对应;
总结:子类重写父类的虚方法不是必须的,子类重写父类的抽象方法是必须的
## 11、成员投影 ##
问题:如果父类A和子类B均包含某一同名成员方法C,则编译时会报错;
解决方法:在方法C前加 new 关键字  这样就隐藏了父类的方法
但是 可以通过显示的出发父类被隐藏的方法:
如:

    public class A
    {
       public void C()
       {
          ConSole.WriteLine("A-----C");
       }
    }

    public class B : A
    {
       public new void C()
       {
          ConSole.WriteLine("B-----C");
       }
    }
    B b =new B();
    b.C()---将调用B类本身的方法:B-----C
    ((A)b).C();---将调用父类A类的方法:A-----C

猜你喜欢

转载自blog.csdn.net/qq_34520411/article/details/79616508