今天又去面试了,试题中有问到对C#中多态的理解,并写个简单的例子。
以此为动力今天详细看了一下C#中的多态应该怎么去理解(2009-05-15)
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
多态性通过派生类覆写基类中的虚函数型方法来实现。
所有的面向对象的语言都具有多态的特性,C#有多态性,那么C++,Java也都有.
多态可以分为静态多态(方法的重载)和动态多态(虚方法的重写)。
(1)静态多态 也称为编译时的多态 是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
(2)动态多态 也称为运行时的多态 是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。
多态中涉及到的四个概念:重载,覆写,虚方法和抽象。
(1)重载 overload(方法的重载)方法名相同,参数不同,返回值不同可以称为重载。
声明同名的两个方法
public int Calculate(int x, int y)
public double Calculate(double x, double y)
(2)覆盖 override 派生类重写父类的某个虚方法(Virtual Method)。方法名相同,参数相同,返回值相同。
(3)虚方法: virtual 使用关键字Virtual声明,属性和方法可以声明为虚方法,成员和Static 函数都不可以声明。虚方法可以有方法体。
(4)抽象 分为抽象方法和抽象类。
抽象函数也是虚拟的,可以看成是没有实现体的虚方法, Virtual 和abstract不能同时用。
抽象函数一定要定义在抽象类中。
抽象类不能实例化,而抽象函数没有执行代码,必须在非抽象的派生类中重写。