夜光序言:
看清一个人,不一定说出来,拒绝来往可以,但若是翻脸就会伤害到了自己。
正文:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 夜光测试1
{
//序言:动态多态又称为虚方法
//首先,我们创建一个游戏单位
class GameUnit{ //游戏单位
//1.我们定义一个攻击方法
public void Attack()
{
Console.WriteLine("攻击");
}
}
class AirUnit //夜光:定义为空中单位
{
public void Attack()
{
Console.WriteLine("空中单位进行攻击");
}
}
class GroundUnit //夜光:定义为地面单位
{
public void Attack()
{
Console.WriteLine("地面单位进行攻击");
}
}
class Program
{
static void Main(string[] args)
{
#region 动态多态
//先new两个对象出来
AirUnit au = new AirUnit();
GroundUnit gu = new GroundUnit();
au.Attack();
gu.Attack();
#endregion
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 夜光测试1
{
//序言:动态多态又称为虚方法
//首先,我们创建一个游戏单位
class GameUnit{ //游戏单位
//1.我们定义一个攻击方法
// virtual表示让Attack方法行为多态
public virtual void Attack()
{
Console.WriteLine("攻击");
}
}
//派生类需要加上override
class AirUnit : GameUnit //夜光:定义为空中单位
{
public override void Attack()
{
Console.WriteLine("空中单位进行攻击");
}
}
//派生类需要加上override
class GroundUnit : GameUnit //夜光:定义为地面单位
{
public override void Attack()
{
Console.WriteLine("地面单位进行攻击");
}
}
class Program
{
static void Main(string[] args)
{
#region 动态多态
//先new两个对象出来
AirUnit au = new AirUnit();
GroundUnit gu = new GroundUnit();
/*au.Attack();
gu.Attack();*/
//1.夜光:没有实线多态的情况
//虽难gameU指向一个AirUnit,但是C#只能识别到au的基类部分
//2.夜光:实现多态后的情况
//识别出gameU就是指向的au(AirUnit),并且C#识别到attack是一个虚方法
//于是调用gameU实际指向对象(au)的类型(AirUnit)的重写版本
/*GameUnit gameU = au;
* 之后我们就可以用GameUnit对游戏对象进行统一的管理
au.Attack();*/
/* GameUnit gameU = au;
gameU.Attack(); //识别出gameU就是指向的au*/
GameUnit[] guArray = new GameUnit[2]; //我先用数组演示一下
guArray[0] = au;
guArray[1] = gu;
for(int i=0;i< guArray.Length; i++)
{
/* Console.WriteLine(guArray[i]);//不是这样写,我们是要调用方法*/
guArray[i].Attack();
}
#endregion
Console.ReadLine();
}
}
}