千家信息网

C#继承怎么实现

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"C#继承怎么实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#继承怎么实现"吧!一.继承的类型在面向对象的编程中,有两种截然不同继承
千家信息网最后更新 2026年11月02日C#继承怎么实现

本篇内容主要讲解"C#继承怎么实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#继承怎么实现"吧!

    一.继承的类型

    在面向对象的编程中,有两种截然不同继承类型:实现继承和接口继承

    1.实现继承和接口继承

    *实现继承:表示一个类型派生于基类型,它拥有该基类型的所有成员字段和函数。在实现继承中,派生类型采用基类型的每个函数的实现代码,除非在派生类型的定义中指定某个函数的实现代码。在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,可以使用这种类型的继承。
    *接口继承:表示一个类型只继承了函数的签名,没有继承任何的代码。在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。

    2.多重继承

    C#不支持多重继承,但C#允许类型派生自多个接口————多重接口继承。这说明,C#类可以派生自另一个类和任意多个接口。更准确的说,因为System.Object是一个公共的基类,所以每个C#(除Object之外)都有一个基类,还可以有任意多个接口。

    3.结构的继承

    使用结构的一个限制是结构不支持实现继承,但每个结构都自动派生自System.ValueType。不能编码实现类型层次的结构,但结构可以实现接口。

    二.继承的实现

    语法:

      class MyDreved:BaseClass  {  }

    如果类或结构也派生自接口,则用逗号分隔列表中的基类和接口:

      class MyDreved:BaseClass,IIntenface1,IIntenface2  {  }

    如果在类定义中没有指定基类,C#编译器就假定System.Object是基类。

    1.虚方法

    把一个基类函数声明为virtual,就可以在任何派生类中重写(override)该函数:

      class BaseClass  {    public virtual void VirtualMethod()    {      //    }  }

    也可以把属性声明为virtual。对于虚属性或重写属性,语法与非虚属性相同,但要在定义中添加virtual关键字:

      public virtual string Name  {    get;set;  }

    C#中虚函数的概念与标准OOP的概念相同:可以在派生类中重写虚函数。在调用方法时,会调用该派生类的合适方法。在C#中,函数默认情况下不是虚的,但(除了构造函数)可以显式的声明为virtual。
    在派生类中重写一个函数时,要使用override关键字显示声明:

      class MyDreved: BaseClass  {    public override void VirtualMethod()    {      //    }  }

    成员字段和静态函数都不能声明为virtual,因为这个概念只对类中的实例函数成员有意义。

    2.隐藏方法

    如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为virtual和override,派生类方法就会隐藏基类方法。

    class A {    public void a()    {      Console.WriteLine('CLASS is A');    } }class B:A{    public void a()    {       Console.WriteLine('CLASS is B');    }}class client {    static void main()    {        B b=new B();       A a=b;       a.a();          b.a();    }}/*输出CLASS IS ACLASS IS B*/

    在大多数情况下,是要重写方法,而不是隐藏方法,因为隐藏方法会造成对于给定类的实例调用错误的方法。但是,C#语法会在编译时收到这个潜在错误的警告。
    在C#中,要隐藏一个方法应使用new 关键字声明,这样在编译时就不会发出警告:

      class A  {    public void a()    {      Console.WriteLine('CLASS is A');    }  }  class B:A  {    public new void a()    {       Console.WriteLine('CLASS is B');    }  }

    3.调用函数的基类版本

    C#可以从派生类中调用方法的基本版本:base.()

      class MyDreved: BaseClass  {    public override void VirtualMethod()    {      base.VirtualMethod();    }  }

    可以使用base.()语法调用基类中的任何方法,不必从同一方法的重载中调用它。

    4.抽象类和抽象函数

    C#允许把类和函数声明为abstract.抽象类不能实例化,而抽象不能直接实现,必须在非抽象的派生类中重写。显然抽象函数也是虚拟的(尽管不需要提供virtual,实际上,也不能提供该关键字)。
    如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的:

      abstract class Building  {    public abstract void Cal();  }

    抽象类中不能声明非抽象方法,但可以声明其它的非抽象成员。

    5.密封类和密封方法

    C#允许把类和方法声明为sealed。对于类,这表示不能继承该类;对于方法,表示不能重写该方法。

      sealed class A  {  }  class B:A //报错  {  }

    如果基类上不希望有重写的方法和属性,就不要把它声明为virtual.

    6.派生类的构造函数

    假定没有为任何类定义任何显示的构造函数,编译器就会为所有的类提供默认的初始化构造函数,在后台编译器可以很好的解决类的层次结构中的问题,每个类中的每个字段都会初始化为对应的默认值。
    在创建派生类的实例时,实际上会有多个构造函数起作用。要实例化的类的构造函数本身不能初始化类,还必须调用基类中的构造函数。
    构造函数的调用顺序是先调用Object,在按照层次结构调用基类的构造函数,由基类到父类,直到到达要实例化的类为止。在这个过程中,每个构造函数都初始化它自己的类中的字段。因为最先调用的总是基类的构造函数,所以派生类在执行过程中可以访问任何基类的成员,因为基类已经构造出来了,其字段也初始化了。

    • *在层次结构中添加无参数的构造函数 在层次结构中添加一个无参数的构造函数会替换默认的构造函数,所以在执行过程中,会默认调用基类中添加的无参数的构造函数。其它方面不变。

    • *在层次结构中添加带参数的构造函数 在层次结构中要调用这个带参数的构造函数,需要在父类的构造函数中显示调用:

    public abstract class GenericCustomer{    private string name;    public GenericCustomer()    {        name = "";    }    public GenericCustomer(string name)    {        this.name = name;    }    public string Name     {         get {return name;}        set {name = value;}    }}public class Nevermore60Customer : GenericCustomer{    private string referrerName;    private uint highCostMinutesUsed;    ublic Nevermore60Customer(string name) : this(name, "            ")    {    }    public Nevermore60Customer(string name, string referrerName) : base(name)    {        this.referrerName = referrerName;    }    public string ReferrerName    {        get {return referrerName;}         set {referrerName = value;}    }}

    三. 修饰符

    修饰符可以指定方法的可见性:如public或private,还可以指定一项的本质,如方法是virtual或abstract.

    1.可见性修饰符

    修饰符应用于说明
    public所有类和成员任何代码可以访问
    protected类的成员和内嵌类只有在类内部和派生类中访问
    internal所有类和成员只有在类内部和包含它的程序集中访问
    private类的成员和内嵌类只有在类内部访问
    protected internal类的成员和内嵌类只有在类内部,派生类中和包含它的程序集中访问

    不能把类定义为protected,private,protected internal,因为这些修饰符对于包含在名称空间中的类型没有意义。因此这些修饰符只能应用于成员。但是可以用这些修饰符定义嵌套的类(内嵌类,包含在其它类中的类),因为在这种情况下,类也具有成员的状态:

      public class OuterClass  {    protected class InnerClass    {    }  }

    2.其它修饰符

    修饰符应用于说明
    new函数隐藏函数
    static所有成员静态
    virtual函数成员可以由派生类重写
    abstract类,函数抽象
    override函数重写虚拟和抽象的成员
    sealed类,方法,属性不能继承和重写
    extern仅静态方法成员在外部用另一种语言实现

    四.接口

      public interface IDisposable  {    void Dispose();  }

    声明接口在语法上和声明抽象类完全相同,但不允许提供任何成员的实现方式。抽象类可以提供除方法之外的其它成员的实现方式,比如属性。
    一般情况下,接口只能包含方法,属性,索引器和事件的声明。
    不能实例化接口,接口即不能有构造函数,也不能有字段。接口定义也不允许包含运算符重载。
    在接口中不允许声明关于成员的修饰符。接口成员总是公有的,不能声明为虚拟和静态。如果需要,在实现的类中声明。
    实现接口的类必须实现接口的所有成员。
    接口可以彼此继承,其方式与类的继承方式相同。

    到此,相信大家对"C#继承怎么实现"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    函数 方法 成员 接口 类型 C# 结构 属性 实例 层次 字段 相同 参数 语法 编译 代码 关键 关键字 只有 多个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 广东万易互联网科技有限公司惠州分公司 蓝思科技飞鸽互联网 高科技互联网 互联网科技财经 工业互联网科技新基建 小马过河互联网科技 左右互联网络科技 互联网时代科技改变生活 互联网金融中的现代科技 岳阳华臻互联网科技有限公司 成都互联网科技公司工作好不好 天津腾达互联网科技有限公司 明优互联网科技有限公司 国大互联网教育科技有限公司薪资 广州百诚互联网科技有限公司官网 江苏互联网科技小贷 普陀区互联网教育科技管理办法 数字互联网科技有限公司 重庆科技产业互联网有哪些 科技信息互联网 科技互联网技术 沃里互联网科技 四川狮子座互联网科技 卓越科技互联网 招聘 镁科技互联网资讯平台 银川新华互联网科技学校地址 开一家科技互联网公司需要多少钱 民营互联网公司国防科技 工业互联网展湾科技股份有限公司
    0