.NET开发基础:从简单的例子理解泛型 分享

从简单的例子理解泛型
话说有家影视公司选拔偶像派男主角,导演说了,男演员,身高是王道。于是有下面代码:
 

复制代码 代码如下:


//男演员实体类
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方法,让它以后可以支持男主,女主,男配,女配,男群众,女群众甚至支持所有两个对象之间的比较:
 

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgjfz.html