C#多态

多态:相同的操作在不同对象中产生不同结果。多态使用虚方法、抽象实现。

(1)虚方法(Virtual)、重写(Override):针对多态而言,即多态通过虚方法实现。

注:在父类中定义为虚方法。在子类中重写方法。

例:

class TrafficTool                       //定义父类

{

  public virtual void Run()         //定义两个虚方法,因为所有TrafficTool的子类都具有Run和Stop这两个功能

  {

    Debug.Log("Run");

  }

  public virtual void Stop()

  {

    Debug.Log("Stop");

  }

}


class Car:TrafficTool         //定义car类,继承自TrafficTool

{

  public override void Run()                       //重写父类中的Run方法,虽然Car也具有Run功能,但是需要与别的子类中的Run区分

  {

    Debug.Log("Car Run");

  }

  public override void Stop()                      //重写父类中的Stop方法。

  {

    Debug.Log("Car Stop");

  }

}


class Plane:TrafficTool

{

  public override void Run()                       //重写父类中的Run方法。

  {

    Debug.Log("Plane Run");

  }

  public override void Stop()                      //重写父类中的Stop方法。

  {

    Debug.Log("Plane Stop");

  }

}


class Driver                                //定义Driver类,用以调用                          

{

  public void Drive(TrafficTool tool)     //定义Drive方法,定义TrafficTool类型参数,以通用所有不同的方法。

  {

    tool.Run();

    tool.Stop();

  }

}


class Manager:MonoBehavior

{

Driver d1 = new Driver();

d1.Drive(new Cae());

d1.Drive(new Plane());

}

注:TrafficTool是父类,Car类和Plane类都继承自TrafficTool类,他们都具有父类的基本功能,即Run()和Stop()两个方法。但是Car和Plane的Run、Stop明显是不一样的。

所以将TrafficTool的方法定义为虚方法,将两个子类的方法重写以区分。最后,定义Driver类用以使用以上类。所使用的参数为TrafficTool类型,此处可以理解为一种通用模式,即,不管传入的参数为Car类还是Plane类,都可以调用对应的方法。



(2)抽象(父类抽象、方法抽象,即在父类中的方法只能是抽象方法,不能实现,在子类中通过重写实现)

父类 abstract claa Shape()

{

public abstract void GetVolume();

public abstract void Length();

}

注:抽象方法必须存在于抽象类中,在父类中抽象方法,不能实现方法。


子类class Circle : Shape

{

public float radious;

public Circle(float r)                    //构造函数,初始化半径值

{

this.radious = r;

}

public override void GetVolume()   //在子类中重写实现父类中抽象的方法

{

Debug.Log("Mathf.PI * Mathf.Pow(radious,2)");

}

public override void Lengtg()

{

Debug.Log("2 * Mathf.PI * radious");

}

}


class Manager : MonoBehavior

{

Shape shape = new Circle(10);

shape.GetVolume();

shape.Length();

}


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值