iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#继承怎么实现
  • 364
分享到

C#继承怎么实现

2023-06-29 23:06:44 364人浏览 安东尼
摘要

本篇内容主要讲解“C#继承怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#继承怎么实现”吧!一.继承的类型在面向对象的编程中,有两种截然不同继承类型:实现继承和接口继承1.实现继承和接

本篇内容主要讲解“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();    }}

    在大多数情况下,是要重写方法,而不是隐藏方法,因为隐藏方法会造成对于给定类的实例调用错误的方法。但是,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.<MethodName>()

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

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

    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 = "<no 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, "            <None>")    {    }    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#继承怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: C#继承怎么实现

    本文链接: https://www.lsjlt.com/news/326784.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C++继承与虚继承怎么实现
      这篇文章主要介绍“C++继承与虚继承怎么实现”,在日常操作中,相信很多人在C++继承与虚继承怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++继承与虚继承怎么实现”的疑惑有所帮助!接下来,请跟着小编...
      99+
      2023-06-30
    • C#继承怎么实现
      本篇内容主要讲解“C#继承怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#继承怎么实现”吧!一.继承的类型在面向对象的编程中,有两种截然不同继承类型:实现继承和接口继承1.实现继承和接...
      99+
      2023-06-29
    • C#中的继承怎么实现
      在C#中,继承是通过使用关键字" : "来实现的。下面是一个简单的示例,演示了如何在C#中实现继承: // 定义...
      99+
      2024-03-06
      C#
    • C#怎么实现多重继承
      这篇文章主要讲解了“C#怎么实现多重继承”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么实现多重继承”吧!C# 多重继承多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能...
      99+
      2023-06-17
    • C++多继承(多重继承)的实现
      在前面的例子中,派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有...
      99+
      2023-05-16
      C++多继承 C++多重继承
    • C#之继承实现
      目录一.继承的类型1.实现继承和接口继承2.多重继承3.结构的继承二.继承的实现1.虚方法2.隐藏方法3.调用函数的基类版本4.抽象类和抽象函数5.密封类和密封方法6.派生类的构造函...
      99+
      2024-04-02
    • C++详细讲解继承与虚继承实现
      目录继承的概念及定义概念:定义:继承关系和访问限定符总结基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员复杂的菱形继承及菱形虚拟继承虚继承原理继承的...
      99+
      2024-04-02
    • c#继承多个基类怎么实现
      非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
      99+
      2024-05-14
    • JavaScript继承怎么实现
      小编给大家分享一下JavaScript继承怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ES6之前,JavaScript...
      99+
      2024-04-02
    • Javascript怎么实现继承
      这篇文章主要介绍“Javascript怎么实现继承”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Javascript怎么实现继承”文章能帮助大家解决问题。1、构造函...
      99+
      2024-04-02
    • golang怎么实现继承
      Go语言没有显式的类和继承机制,但通过结构体嵌入和接口组合,可以实现类似的功能。结构体嵌入和接口组合都是Go语言中常用的代码复用和扩展方式,开发人员可以根据实际需求选择合适的方式来组织代码。本教程操作系统:windows10系统、Go 1....
      99+
      2023-12-12
      golang继承 go语言 Golang
    • golang继承怎么实现
      本篇内容主要讲解“golang继承怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“golang继承怎么实现”吧!在 Golang 中,我们可以通过结构体来实现继承。比如下面这个例子,我们定...
      99+
      2023-07-06
    • php中怎么实现类继承和接口继承
      这篇文章将为大家详细讲解有关php中怎么实现类继承和接口继承,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、PHP类不支持多继承,也就是子类只能继承一个父...
      99+
      2024-04-02
    • javascript中怎么实现继承
      今天就跟大家聊聊有关javascript中怎么实现继承,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对象冒充(多继承):a. 代码:function...
      99+
      2024-04-02
    • python怎么实现多继承
      在Python中,实现多继承可以通过使用逗号分隔的多个父类来定义一个类。详细介绍:当一个类继承多个父类时,将继承所有父类的属性和方法。这意味着子类可以访问和使用父类中定义的属性和方法。本教程操作系统:windows10系统、Python3....
      99+
      2023-12-11
      多继承 python
    • php怎么实现多继承
      这篇文章主要介绍“php怎么实现多继承”,在日常操作中,相信很多人在php怎么实现多继承问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php怎么实现多继承”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!tr...
      99+
      2023-06-20
    • C++继承的实现原理是什么
      C++继承的实现原理是通过派生类继承基类的成员和方法。当一个派生类继承一个基类时,派生类会拥有基类的所有成员变量和成员函数。在内存中...
      99+
      2023-10-26
      C++
    • 如何实现C#继承与C#多态
      这篇文章主要讲解了“如何实现C#继承与C#多态”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现C#继承与C#多态”吧!在C#中实现OOP思想,丝毫不逊色于Java,下面我通知两句话来帮...
      99+
      2023-06-17
    • JS怎样实现继承
      这篇文章将为大家详细讲解有关JS怎样继承,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。原型继承得靠原型来实现,当然原型不是这篇文章的重点,我们来复习一下即可...
      99+
      2024-04-02
    • JavaScript怎样实现继承
      这篇文章给大家分享的是有关JavaScript怎样实现继承的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。继承是面向对象编程中又一非常重要的概念,JavaScript支持实现继承,...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作