当前位置:编程学习 > asp >>

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

前言
 .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方法,让它以后可以支持男主,女主,男配,女配,男群众,女群众甚至支持所有两个对象之间的比较:
 
/// <summary>
/// 男演员:实现IComparable接口
/// </summary>
public class Boy : IComparable
{
    //姓名
    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 int CompareTo(object obj)
    {
        //比较身高
        return this.mHeight - ((Boy)obj).Height;
    }
}

/// <summary>
/// 女演员:实现IComparable接口
/// </summary>
public class Girl : IComparable
{
    //姓名
    private string mName;
    //体重 www.zzzyk.com
    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 int CompareTo(object obj)
    {
        //比较体重
        return

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,