从简单的例子理解泛型
话说有家影视公司选拔偶像派男主角,导演说了,男演员,身高是王道。于是有下面代码:
复制代码 代码如下:
//男演员实体类
public class Boy
{
//姓名
private string mName;
//身高
private int mHeight;
public string Name {
get { return this.mName; }
}
public int Height {
get { return this.mHeight; }
}
public Boy(string name, int height) {
this.mName = name;
this.mHeight = height;
}
}
//演员选拔类
public class Compare
{
//导演导超女出生,喜欢一对一PK
public Boy WhoIsBetter(Boy boy1, Boy boy2)
{
if (boy1.Height > boy2.Height)
{
return boy1;
}
else
{
return boy2;
}
}
}
//测试
static void Main(string[] args)
{
Boy boy1 = new Boy("潘长江", 165);
Boy boy2 = new Boy("刘德华", 175);
Console.WriteLine(new Compare().WhoIsBetter(boy1, boy2).Name);
Console.ReadLine();
}
代码很简单,Boy为男演员实体类,包含姓名和身高两个字段属性;Compare类中的WhoIsBetter为选拔逻辑方法,负责选出两个男演员中较高的那个;测试结果:刘德华完胜。
任何行业都是一样,需求变更无处不在。第二天,需要选女主角,导演说了,女演员,苗条是王道。于是代码变更,添加了女演员实体类,添加了女演员的选拔方法:
复制代码 代码如下:
//添加女演员实体
public class Girl
{
//姓名
private string mName;
//体重
private int mWeight;
public string Name
{
get { return this.mName; }
}
public int Weight
{
get { return this.mWeight; }
}
public Girl(string name, int weight){
this.mName = name;
this.mWeight = weight;
}
}
//演员选拔类中添加一个女演员方法
public class Compare
{
//男演员身高是王道
public Boy WhoIsBetter(Boy boy1, Boy boy2)
{
if (boy1.Height > boy2.Height)
{
return boy1;
}
else
{
return boy2;
}
}
//女演员苗条是王道
public Girl WhoIsBetter(Girl girl1, Girl girl2)
{
if (girl1.Weight < girl2.Weight)
{
return girl1;
}
else
{
return girl2;
}
}
}
//测试
static void Main(string[] args)
{
Boy boy1 = new Boy("潘长江", 165);
Boy boy2 = new Boy("刘德华", 175);
Girl girl1 = new Girl("巩俐", 120);
Girl girl2 = new Girl("周迅", 80);
Console.WriteLine(new Compare().WhoIsBetter(boy1, boy2).Name);
Console.WriteLine(new Compare().WhoIsBetter(girl1, girl2).Name);
Console.ReadLine();
}
结果选出了身高更高的刘德华,选出了体重更轻的周迅,导演很满意。但从程序设计角度,这段代码显然不够完美,第一天选男主角,第二天选女主角,往后还要选男配角,选女配角,选群众......按目前方式,只有往Compare类里不断添加方法才能满足导演需求,方法会越来越多,代码会越来越长。于是,我决定修改WhoIsBetter方法,让它以后可以支持男主,女主,男配,女配,男群众,女群众甚至支持所有两个对象之间的比较:
复制代码 代码如下: