C#多态入门

    多态,字面理解,即同一事物展示出不同的状态或能力。

    在C#中,多态分为静态和动态两种,静态多态性是在编译的时候确定的,动态多态性是在程序运行期间确定的。静态多态性通常通过函数重载和运算符重载实现。动态多态性通常通过继承和方法重写来实现。

    今天学习了一下多态性的基本内容,在这做一个整理。

 ·静态多态性

    首先是函数重载,即声明多个名称相同的函数,这些函数可以有参数个数的不同,或者参数类型的不同,总之,除了名称外,同名函数的其他部分不能完全一样,不然没法区分了(不能仅仅是返回值不同)。下面举一个小例子,可以对照学习。

打印结果为:

    其次是运算符重载,这个特性即可以将常用的运算符,在不同的场景中赋予独特的用途。下面是重载运算符的重写格式范例:

    这个例子是将*乘法运算符进行了重载,即特定范围内,使用*会执行这个{}里面的内容,而不是两数乘法,这里的定义格式,首先是访问修饰符,其次是static,这个静态非静态不强求,但常用的是静态的,如果你将运算符重载为非静态的,那么在使用该运算符时,需要先创建类的实例,然后通过该实例来调用运算符。具体情况看自己的需求,下来是返回值类型,再是operator关键字,这个关键字就是用来声明重载运算符的,然后是具体的运算符,再是参数列表,最后是主体内容。

下面看一个具体的例子:

打印结果为:

    这两个例子的代码逻辑都很简单,可以大概看看。

    运算符重载这里还有一个问题:不是所有的运算符都支持重载。所有在使用的时候先查查能不能重载再使用。

·动态多态性

动态多态性一般是通过抽象类和虚方法实现的。

先看一下抽象类实现:

    抽象类的声明,即在类声明中加入abstract关键字,同一般的类相比,抽象里具有一些不同,首先就是抽象类是不能被实例化的,抽象类中可以定义抽象方法,抽象方法用来实现动态多态性,抽象方法的使用必须通过继承的方式,所以抽象类不能通过sealed设置为密封类。

下面看一个具体的例子:

打印结果为:

动态多态性的第二种实现即为虚方法:

虚方法不需要在抽象类里面,只需要在声明的函数中加入virtual关键字即可。

下面看一个简单的例子:

打印结果为:

这个代码里面的base.teach();即调用父类的teach函数。

    虚方法和抽象方法的不同也能看出来,首先虚方法只需要在声明时加入virtual关键字,不需要指明在什么类中,最后继承该类即可,而抽象方法必须写在抽象类中。其次,抽象方法在定义时是不包含方法体的,而虚方法在定义时是有方法体的。这两种方法在重新定义时都需要override关键字。

    这就是一些多态的入门内容。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值