C#多态性概念及特点的解析

理解C#多态性之前首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。C#多态性通过派生类覆写基类中的虚函数型方法来实现。

10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有桐城免费网站建设让你可以放心的选择与我们合作。

C#多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。

◆编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

◆运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。

下面我们来分别理解一下C#多态中涉及到的四个概念:重载,覆写,虚方法和抽象方法。

C#多态性之重载和覆写的区别:

重载

类中定义的方法的不同版本

 
 
 
  1. public int Calculate(int x, int y)
  2. public double Calculate(double x, double y)

特点(两必须一可以)

方法名必须相同、参数列表必须不相同、返回值类型可以不相同

覆写

子类中为满足自己的需要来重复定义某个方法的不同实现。通过使用override关键字来实现覆写。只有虚方法和抽象方法才能被覆写。

要求(三相同)

(1)相同的方法名称

(2)相同的参数列表

(3)相同的返回值类型

C#多态性之虚方法和抽象方法:

虚方法:

声明使用virtual关键字。

调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。

虚方法可以有实现体。

抽象方法:

必须被派生类覆写的方法。

可以看成是没有实现体的虚方法。

如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。

C#多态性其他的介绍:

昨天突然发现C#,和C++俩种语言在多态性的实现机制上面的细微差别。

如果是C++,在基类的构造函数里面调用虚函数的话,会调用本类的不会调用派生类的,原因是基类构造的时候,虚表还没有被派生类继承和修改。

但如果是C#,那就不同了,在基类的构造函数里面照样调用派生类的。不知道有谁知道C#它的这种底层机制是怎样的?

是这样的,C++会先初始化基类,然后逐级初始化派生类型。C#则是一开始就把对象创建好了,然后逐个调用构造函数。本质区别在于C++的构造函数的任务是初始化,C#则不然,C#的类型的任何字段不必初始化,均有默认值,所以C#在调用构造函数之前就已经将对象初始化完毕了。

通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。C#中的每种类型都是多态的。类型可用作它们自己的类型或用作Object实例,因为任何类型都自动将Object当作基类型。

多态性不仅对派生类很重要,对基类也很重要。任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象。基类的设计者可以预测到其基类中可能会在派生类中发生更改的方面。例如,表示汽车的基类可能包含这样的行为:当考虑的汽车为小型货车或敞篷汽车时,这些行为将会改变。基类可以将这些类成员标记为虚拟的,从而允许表示敞篷汽车和小型货车的派生类重写该行为。

C#多态性的相关理解就向你介绍到这里,希望对你了解和学习C#多态性有所帮助。

网页标题:C#多态性概念及特点的解析
文章路径:http://www.shufengxianlan.com/qtweb/news25/511725.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联