国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

泛型

2019-11-17 02:23:05
字體:
來源:轉載
供稿:網友

泛型

描述:

泛型是具有占位符(類型參數)的類、結構、接口和方法。

泛型集合類可以將類型參數用作它存儲的對象的類型。

泛型方法可以將其類型參數用作其返回值的類型或某個形參的類型。

例1:泛型類定義.

定義一個類Generic,當給予其int類型時,Field字段的類型是int;當給予其string類型時,Field字段的類型是string.

public partial class Default3 : System.Web.UI.Page{    PRotected void Page_Load(object sender, EventArgs e)    {        Generic<int> g = new Generic<int>();        g.Field = 1;        Generic<string> s = new Generic<string>();        s.Field = "123";    }}public class Generic<T>{    public T Field;}

例2:泛型方法定義是具有兩個參數列表的方法:一個泛型類型參數列表和一個形參列表.類型參數可以作為返回類型或形參的類型出現.

public class Generic<T>{    public T Field;    /// <summary>    /// 泛型方法    /// </summary>    /// <typeparam name="T"></typeparam>    /// <param name="t"></param>    /// <returns></returns>    public T Ge<T>(T t)    {        return t;    }}

泛型方法可以出現在泛型或者非泛型上.此處要注意的是:

并不是只要方法屬于泛型類型,或者甚至是方法的形參的類型時封閉的泛型參數,就可以說方法是泛型方法.

只有當方法具有它自己的類型參數列表時,才能稱其為泛型方法.


泛型的優點:

1.提高了性能,可以有效的避免裝箱和拆箱.

使用ArrayList:

protected void Page_Load(object sender, EventArgs e){    ArrayList list = new ArrayList();    //執行裝箱操作    list.Add(44);    //執行裝箱操作    list.Add(45);    foreach (int i in list)    {        //執行拆箱操作        Response.Write(i.ToString() + "<br/>");    }    }

使用泛型:

protected void Page_Load(object sender, EventArgs e){       List<int> list = new List<int>();    //不需要執行裝箱操作    list.Add(44);    //不需要執行裝箱操作    list.Add(45);    foreach (int i in list)    {        //不需要執行拆箱操作        Response.Write(i.ToString() + "<br/>");    }    }

2.類型安全.如果使用對象Object,則可以添加任意類型,如果泛型中確定為某一類型,則只能對該類型的對象進行操作.

見上例,可以在ArrayList中添加一個字符串,但是不能在List<int>對象中添加字符串.


泛型實例

描述:

比較狗的大小和汽車的大小.其中狗的大小衡量采用年齡,汽車的大小衡量單位是噸位.

因為要實現比較方法,所以兩個類都實現了IComparable<T>接口,該接口定義如下:

namespace System{    // 摘要:    //     定義由值類型或類實現的通用的比較方法,以為排序實例創建類型特定的比較方法。    public interface IComparable<T>    {        // 摘要:        //     比較當前對象和同一類型的另一對象。        //        // 參數:        //   other:        //     與此對象進行比較的對象。        //        // 返回結果:        //     一個 32 位有符號整數,指示要比較的對象的相對順序。返回值的含義如下: 值 含義 小于零 此對象小于 other 參數。零 此對象等于 other。        //     大于零 此對象大于 other。        int CompareTo(T other);    }}

狗的定義如下:

public class Dog : IComparable<Dog>{    public string Name { get; set; }    public int Age { get; set; }    public Dog(string name, int age)    {        this.Name = name;        this.Age = age;    }    public int CompareTo(Dog other)    {        return this.Age-other.Age;    }    public override string ToString()    {        return string.Format("Name:{0}    Age:{1}<br/>", this.Name, this.Age);    }}

汽車的類定義如下:

public class Car : IComparable<Car>{    public string Name { get; set; }    public int Weight { get; set; }    public Car(string name, int weight)    {        this.Name = name;        this.Weight = weight;    }    public int CompareTo(Car other)    {        return this.Weight - other.Weight;    }        public override string ToString()    {        return string.Format("Name:{0}    Weight:{1}<br/>", this.Name, this.Weight);    }}

比較類定義如下:

public class Generic{    public static T Max<T>(T t1, T t2)    {        IComparable<T> ic1 = t1 as IComparable<T>;        return ic1.CompareTo(t2) > 0 ? t1 : t2;    }}

應用:

public partial class Default3 : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        Dog d1 = new Dog("貝貝", 6);        Dog d2 = new Dog("點點", 5);        Display<Dog>(Generic.Max<Dog>(d1, d2));        Car c1 = new Car("奔馳", 3);        Car c2 = new Car("東風", 10);        Display(Generic.Max(c1, c2));    }    void Display<T>(T t)    {        Response.Write(t.ToString());    }}

結果:

Name:貝貝    Age:6Name:東風    Weight:10

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 依兰县| 东安县| 富民县| 本溪市| 金昌市| 神农架林区| 叙永县| 阳春市| 陆良县| 通州市| 杭锦后旗| 寿阳县| 政和县| 双峰县| 渝北区| 疏勒县| 房山区| 丰城市| 栾川县| 安平县| 三门峡市| 丰都县| 淮滨县| 双鸭山市| 云林县| 临潭县| 抚松县| 平顶山市| 分宜县| 乳源| 明星| 上思县| 大埔区| 长宁区| 寻乌县| 乐平市| 东乡族自治县| 罗定市| 济源市| 子洲县| 宣汉县|