zoukankan      html  css  js  c++  java
  • C#-继承(十一)


    继承概念
      承用于创建可重用、扩展和修改在其他类中定义的行为的新类
      创建一个类的时候,不是要写全新的数据成员和成员函数,可以指定新的类继承一个已经存在的类的成员。已有的类称为基类,新的类称为派生类
      派生类只能有一个直接基类,但一个基类可以有多个直接派生类
      例如ClassAnimal派生出ClassMammals,ClassMammals派生出ClassHuman,则ClassHuman会继承ClassMammals和ClassAnimal中声明的成员


    继承特点
      派生类是对基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义
      继承是可以传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中声明的成员
      Object类是所有类的基类。C#中的类都直接的或者间接的从Object类继承
      构造函数和析构函数不能被继承,除此之外其他成员能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
      派生类如果定义了与继承而来的成员同名的新成员,那么就可以覆盖已继承的成员,但这兵不是删除了这些成员,只是不能再访问这些成员
      类可以定义虚方法、虚属性及虚索引指示器,它的派生类能够重载这些成员,从而使类可以展示出多态性
      派生类只能从一个类中继承,可以通过接口来实现多重继承


    基本语法

    1 class MyClass : BaseClass
    2 {
    3 // 方法体
    4 }

      如果在类定义中没有指定基类,默认System.Object是基类


    虚方法
      将一个基类函数声明为virtual,则在任何一个派生类中可以重写该函数

    1 clss BaseClass
    2 {
    3 public virtual void VirtualMethod()
    4 {
    5 // 方法体
    6 }
    7 }

    在派生类中使用override重写函数

    1 class MyClass :BaseClass
    2   {
    3     public override void VirtualMethod()
    4     {
    5       // 方法体
    6     }
    7   }

    将属性声明为virtual

    1 public virtual string Name
    2 {
    3   get;set;
    4 }

    隐藏方法
      在没有声明virtual和override的情况下,签名相同的方法在基类和派生类中都进行了声明
      在派生类方法中会隐藏基类方法
      但是隐藏方法会造成对于给定类的实例调用错误的方法
      C#语法在编译时会收到这个潜在错误的警告
      所以要隐藏一个方法时用new关键字声明,会避免编译时就发出警告错误

     1 class ClassBase
     2 {
     3   public void BaseMethod()
     4   {
     5     // 方法体
     6   } 
     7 }
     8 
     9 
    10 class MyClass : ClassBase
    11 {
    12   public new void MyClass()
    13   {
    14      // 方法体
    15   }
    16 }


    抽象类
      C#允许把类和函数声明为abstract
      抽象类不能实例化,而抽象不能直接实现,必须在非抽象的派生类中重写
      如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的
      抽象类中不能声明非抽象方法,但可以声明其它的非抽象成员
      抽象类语法:  

    1 abstract class MyClass
    2 {
    3   public abstract void MyMethod();
    4 }

      抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块
      抽象类的派生类必须实现所有抽象方法
      当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法


    密封类和类成员
      密封类的声明是在类定义前面放置关键字 sealed
      密封类不能用作基类 
      密封类禁止派生
      在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件可以将该成员声明为密封成员
      方法是在类成员声明中将sealed关键字置于override关键字的前面

    1 public sealed class ClassSealed
    2 {
    3     // 属性,方法
    4 }
    5 
    6 public class ClassSunSealed : ClassSealed
    7 {
    8     public sealed override void SealdMethod() { }
    9 }

    接口
      接口是一种引用类型,有点像仅包含抽象成员的抽象基类
      类在从接口实现时必须为该接口的所有成员提供实现。 类虽然只能从一个直接基类派生,但可以实现多个接口
      不能实例化接口,接口即不能有构造函数,也不能有字段。接口定义也不允许包含运算符重载
      接口中不允许声明关于成员的修饰符,但是可以在实现的类中作声明
      接口成员总是公有的
      实现接口的类必须实现接口的所有成员
      接口之间的继承和类的继承方式相同

    1 public interface IDisposable
    2 {
    3   void Dispose();
    4 }
  • 相关阅读:
    PID算法控制直流电机笔记
    HAL库直流电机编码测速(L298N驱动)笔记
    HAl库控制L298N直流电机旋转笔记
    MQTT介绍与使用(转载)
    STM32中STD、HAL、LL库比较
    rpm检验是否被改动过
    find命令 参数
    会话管理测试时的注意点
    无权限修改用户组权限的状况一
    burpsuite + sqlmap 日志导出批量扫描
  • 原文地址:https://www.cnblogs.com/tynam/p/9638060.html
Copyright © 2011-2022 走看看