C#多态前奏

来源:互联网 发布:em算法 python代码 编辑:程序博客网 时间:2024/06/05 08:35

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

        同一操作,作用于不同的对象,可以有不同的解释,从而产生不同的执行结果,这就是多态性,也可以说是同一个类型的实例调用相同的方法,产生的结果是不同的。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#多态性一些相关概念的简单总结。。。




0 0
原创粉丝点击