猿问

c#多态性的作用?

c#多态性的作用?


犯罪嫌疑人X
浏览 610回答 2
2回答

撒科打诨

接口多态性,继承多态性和抽象类多态性。接口多态性:简单的说,很多类可以实现同样的接口,而一个类也可以实现很多个接口。继承多态性:继承多态性是最常见的形式。通过virtual关键字的使用,继承多态性提供了方法的不同实现。在继承一个类时,会继承该类的所有方法,属性,事件以及特性。另外还会继承所有这些成员的实现。但有时候并不想继承某个或某些功能,或者需要稍作变化。现在只要在基类中把方法或属性标记为virtual,就可以在子类中重写功能。抽象类多态性:抽象类是指用abstract类型修饰符标记的类。抽象类通常具有抽象方法,抽象方法是指定义了但是没有实现的方法,这种方法不能被实例化。用抽象类来实现多态性有点类似于继承多态性。区别在于,方法标记是abstract,而不是virtual。抽象方法不提供实现,因此是完全依靠子类来实现功能的。抽象方法也比较像接口中定义的方法,因为这种方法提供一个协议声明,表示该方法会在子类中实现。将方法标记为virtual:当方法用关键字virtual修饰时,表明子类可以重写该方法的实现。这是所有面向对象语言的根本。定义一个虚方法后,表明希望在子类中重写该方法。如果并不想重写方法,就不要将方法声明为虚拟的,这样会导致额外的系统开销。这种额外系统开销的来源,是因为要为重写方法检查对象的运行时类型。然后调用派生程度最大的类中的重写方法。如果这个类为基类,哪么就调用该基类中的虚方法,因此,所有在检查类型并查找重写方法时耗去的资源都浪费了。由于派生类中的方法重写了基类中的方法,因此在声明派生类方法时,使用的标记应该与将要重写的虚方法相同。

慕无忌1623718

多态又称后期绑定,是一种在运行时(just in time)指定方法调用地址的技术。通常,编译器在编译期就能知道方法的地址,运行时直接加载这个地址上的堆栈代码(.net中指中间代码)就可以了,这被称为静态绑定或前期绑定,虽然很少使用这个术语。编译器在编译期不能确定方法的地址,而只能在运行时确定的就被称为后期绑定(或动态联编)。例如,对于object类的ToString方法,其方法定义是返回类的名称,但是,调用这个方法却不一定能够返回类的名称(如String类),因为它有可能被派生类重写,多态技术确保运行时能够调用到正确的方法。
随时随地看视频慕课网APP
我要回答