C# 多态性

来源:互联网 发布:it have 还是it has 编辑:程序博客网 时间:2024/06/05 15:46

在c#中,多态性的定义是:同一个操作作用于不同类的实例,不同类将进行不同的解释,最后产生不同的执行结果。其支持两种类型的多态性,即编译时多态性和运行时多态性。编译时,多态性是通过重载实现的,其根据传递的参数、返回的类型等信息决定实现何种操作。运行时,多态性是指直到系统运行时才根据实际情况决定实现何种操作,其是通过虚方法来实现的。

虚方法

通过在方法声明语句的访问修饰符和返回类型之间放置virtual关键字来实现的。当调用虚方法时,运行将确定调用对象是什么类的实例,并调用适当的覆盖方法,通过override关键字来覆盖。如果要实现虚方法的重载,要求在声明中加上override关键字,同时还不能有new、static、virtual修饰符。

抽象类

抽象类的用途是提供多个派生类可共享的基类的公共定义,并使用abstract关键字定义。抽象类的用途与接口很相似,但两者都不能实例化。但是抽象类中可以定义方法二导实现。使用抽象类时要注意以下问题:

1、抽象类只能作为其他类的基类,其不能被直接实例化,也不能对其使用new修饰符;

2、抽象类允许包含抽象成员;

3、抽象类不能同时又是密封类。

抽象方法:可以看成是没有实体的虚方法,是必须被派生类覆盖的方法。在C#中是通过关键字abstract来实现的。如果类的任何一个方法都是抽象的,则该类也必须声明为抽象的。抽象类中可以定义抽象方法,如果一个方法要声明为抽象方法,则方法前加上abstract修饰符即可。抽象方法是一个新的虚方法,它不提供具体的方法实现代码。只能在抽象类中声明抽象方法。对抽象方法,不能使用static或virtual修饰符,而且方法中不能有任何可执行代码,只需要给出方法的原型。

密封类和密封方法

与override关键字连用的还有sealed关键字,sealed关键字用来表示密封。在C#中,密封类的作用是限制扩张性和灵活性。在程序中密封了某个类时,其他类是不能继承该类的。C#还提供密封方法的概念,但类的每个成员不是都可以作为密封方法的,密封方法必须对基类的虚方法进行重载。

方法的隐藏:

还有一种方法可以实现在派生类中的覆盖,即new关键字。这种过程叫做方法的隐藏。但是,派生类和非抽象类的基类方法必须有相同的方法。方法隐藏的作用是可以改变基类的方法。如果一个派生类型被强制转化为基类型,基类型的方法将被调用。



0 0
原创粉丝点击