您的位置:首页 > 编程语言 > C#

C#多态前奏

2015-11-15 15:50 267 查看
        “龙生蛇,凤生鸡,老鼠的儿子会吃鸡”,这是自然界中的变异法则在起作用,面向对象语言借用了变异的思想方法,从而实现了多态性。

        同一操作,作用于不同的对象,可以有不同的解释,从而产生不同的执行结果,这就是多态性,也可以说是同一个类型的实例调用相同的方法,产生的结果是不同的。C#多态性涉及到了重载、重写、虚方法、抽象方法和隐藏方法,因此先对这些概念进行简单总结。

      (一、)重载(overload)

        在同一作用域的两个或多个方法函数名相同,参数列表不同的方法叫做重载。

        重载的三个特点:

        1、方法名必须相同

        2、参数列表必须不相同

        3、返回值类型可以不相同

public static int AddNumber(int num1, int num2)
{
return num1 + num2;
}
public static double AddNumber(double num1, double num2)
{
return num1 + num2;
}
      (二、)重写(override)

      子类中为满足自己的需要来重复定义某个方法的不同实现,需要用override关键字,被重写的方法必须是虚方法,用的是virtual关键字。

        重写的特点是方法名、参数列表、返回值都相同。

//父类
public virtual void EatFood()
{
Console.WriteLine("Animal吃东西");
}
//子类
public override void EatFood()
{
Console.WriteLine("Cat吃东西");
}
      (三、)虚方法

       虚方法即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。

public virtual void EatFood()
{
Console.WriteLine("Animal吃东西");
}
       虚方法调用

Animal A = new Animal();
A.EatFood();
    (四、)抽象方法

       在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义。抽象方法只能在抽象类中定义,且因抽象类无法实例化,抽象方法不能被调用。

public abstract class Animal
{
//字段、属性
public abstract void Shout();//抽象方法
}
public class Pig : Animal
{
public override void Shout()
{
Console.WriteLine("哼哼叫");
}
}
Pig pig = new Pig();
pig.Shout();
Console.ReadKey();


       抽象方法是用abstract修饰;抽象方法没有方法体;抽象方法必须在抽象类中;父类是抽象类,子类继承了这个类,必须把抽象类中的抽象方法重写。

    (五、)隐藏方法

       在派生类中定义的和基类中的某个方法同名的方法,使用new关键字定义。如在基类Animal中有一方法Sleep():

public void Sleep()
{
Console.WriteLine("Animal Sleep");
}
      则在派生类Cat中定义隐藏方法的代码为:

new public void Sleep()
{
Console.WriteLine("Cat Sleep");
}
     隐藏方法不但可以隐藏基类中的虚方法,而且也可以隐藏基类中的非虚方法;隐藏方法中父类的实例调用父类的方法,子类的实例调用子类的方法。

     以上就是C#多态性一些相关概念的简单总结。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: