C#语言基础-5 继承、修饰符、接口

继承
    在面向对象的编程中,有两种继承:实现继承和接口继承。
    实现继承:一个类派生于一个基类型,它拥有基类型的所有成员字段和函数。
    接口继承:一个类型只继承了函数的签名,没有继承任何实现代码。
    其他语言中的多重继承:一个类派生于多个基类型。C#不支持多重实现继承,但是支持多重接口继承C#类可以继承自另一个基类型和多个接口

    结构和类的继承:
        结构总是派生于System.ValueType不支持继承,但是可以派生自任意多个接口。
        类总是派生于System.Object或用户选择的另一个基类型,也可以派生自任意多个接口。

  1、实现继承
  声明类继承于另一类的方式: class 类型名 : 被继承的类型名
  虚方法:
      把基类的方法声明成虚方法后,就可以在派生类中重写该函数。public virtual 返回类型 方法名(){}
      重写时需要使用 override 关键字显式声明。public override 返回类型 方法名(){}
      成员字段和静态函数都不能声明为virtual

  隐藏方式:
    签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为virtual和override ,派生类就会隐藏基类方法
    隐藏方法时使用new public new 返回类型 方法名(){}
    如果需要调用被隐藏的基类方法时,需要 base.基类方法名

  抽象类和抽象函数
    抽象类不能实例化,抽象函数也不能直接实现,必须在非抽象的派生类中重写。
    abstract class Test
    {
        public abstract string Show(){}
    }

  密封类和密封方法
    表示不能继承该类或不能重写该方法。
    sealed class Test
    {
        pubilc sealed string Show(){}
    }

  派生类的构造函数
    派生类的构造函数的调用顺序是从基类到派生类开始的,从System.Object类的构造函数一直到当前派生类的构造函数,所以派生类的
    构造函数可以在执行过程中调用它可以访问的任何基类方法、属性和任何其他成员,因为基类已经构造出来了,其字段也初始化了。

    当基类唯一的构造函数私有时,派生类继承时会导致编译器报错,因为基类无法生成默认的构造函数,导致构造函数无法执行。
    当基类唯一的构造函数有参时,派生类继承时也会导致编译器报错。但是可以通过派生类构造函数调用基类构造函数来实现。

//基类私有化构造函数   错误的
public class Test
{
    private Test()
    {
    }
}
public class Test1 : Test
{
    public Test1()
    {
    }
}
//基类带参构造函数  正确的
public class Test
{
    public Test(int x)
    {
    }
}
public class Test1 : Test
{
    public Test1(int x) : base(x)
    {
    }
}

修饰符
  可见性修饰符
    确定了是否允许其他代码访问某一项。如果有嵌套的类型,则 内部的类型总是可以访问外部类型的所有成员

 其他修饰符

接口

  如果一个类派生自一个接口,那么声明的这个类就必须实现接口的函数。
  一般情况下,接口只能包含方法、属性、索引器和事件的声明。
 不能实例化接口,它只能包含其成员的签名。
 接口既不能有构造函数,也不能有字段,接口定义也不允许包含运算符重载。

  接口名称通常上以字母I开头,以便知道这是一个接口。
  接口实际上并不实现其方法,所以类必须提供这些方法的所有实现代码。如果缺少实现代码,编译器就会产生错误。
  接口仅表示其成员的存在性,类负责确定这些成员是虚拟还是抽象的。


  接口可以彼此继承,其方式与类的继承方式相同。

猜你喜欢

转载自www.cnblogs.com/liuxiansheng1024/p/12578079.html