C#C# 2.0 泛型

[源码下载]

C# 2.0 泛型

作者:webabcd

介绍
泛型是 C# 2.0
的最强大的意义。通过泛型能够定义类型安全的数据结构,而无须使用实际的数据类型。那能够显明增进质量并获取更高品质的代码,因为你能够引用数据处清理计算法。

泛型类

C# 1C# 2/**//*—
C# 3 * 如何 使用 和 继承 泛型类
C# 4—*/
C# 5using System;
C# 6using System.Collections.Generic;
C# 7
C# 8// 泛型类
C# 9public class GenericClass<T>
C# 10C# 11C# 12{
C# 13    // 重回泛型的具体项目和ToString()后的值
C# 14    public virtual string Output(T t)
C# 15C# 16    C# 17{
C# 18        return “类型:” + t.GetType().ToString() + “;值:” + t.ToString();
C# 19    }
C# 20}
C# 21
C# 22// 继承自3个泛型类,钦命基类的泛型的切实可行项目
C# 23public class InheritClass1 : GenericClass<string>
C# 24C# 25C# 26{
C# 27
C# 28}
C# 29
C# 30// 继承自三个泛型类,基类和子类都是均等泛型
C# 31public class InheritClass2<T> : GenericClass<T>
C# 32C# 33C# 34{
C# 35    public override string Output(T t)
C# 36C# 37    C# 38{
C# 39        return “子类完结-类型:” + t.GetType().ToString() + “;值:” + t.ToString();
C# 40    }
C# 41}
C# 42
C# 43// 继承自二个泛型类,钦定基类的泛型的实际品种,子类如故能够是泛型
C# 44public class InheritClass3<Z> : GenericClass<double>
C# 45C# 46C# 47{
C# 48    public string ChildOutput(Z z)
C# 49C# 50    C# 51{
C# 52        return “子类达成-类型:” + z.GetType().ToString() + “;值:” + z.ToString();
C# 53    }
C# 54}
C# 55
C# 56
C# 57public partial class Generic_Class : System.Web.UI.Page
C# 58C# 59C# 60{
C# 61    protected void Page_Load(object sender, EventArgs e)
C# 62C# 63    C# 64{
C# 65        GenericClass<DateTime> c = new GenericClass<DateTime>();
C# 66        Response.Write(c.Output(DateTime.Now) + “<br />”);
C# 67
C# 68        InheritClass1 c1 = new InheritClass1();
C# 69        Response.Write(c1.Output(“abc”) + “<br />”);
C# 70
C# 71        GenericClass<Guid> c2 = new InheritClass2<Guid>();
C# 72        Response.Write(c2.Output(new Guid()) + “<br />”);
C# 73
C# 74        InheritClass3<int> c3 = new InheritClass3<int>();
C# 75        Response.Write(c3.Output(Math.PI) + ” ||| ” + c3.ChildOutput(123) + “<br />”);
C# 76    }
C# 77}

运转结果
类型:System.DateTime;值:2007-2-10 22:56:09
类型:System.String;值:abc
子类达成-类型:System.Guid;值:00000000-0000-0000-0000-000000000000
花色:System.Double;值:3.14159265358979 |||
子类达成-类型:System.Int32;值:123

泛型方法

C# 78C# 79/**//*—
C# 80 * 如何 使用 泛型方法 
C# 81—*/
C# 82using System;
C# 83using System.Collections.Generic;
C# 84
C# 85public class GenericMethod
C# 86C# 87C# 88{
C# 89    // 静态 泛型方法
C# 90    public static string Output<T>(T t)
C# 91C# 92    C# 93{
C# 94        return “类型:” + t.GetType().ToString() + “;值:” + t.ToString();
C# 95    }
C# 96}
C# 97
C# 98
C# 99public partial class Generic_Method : System.Web.UI.Page
C# 100C# 101C# 102{
C# 103    protected void Page_Load(object sender, EventArgs e)
C# 104C# 105    C# 106{
C# 107        Response.Write(GenericMethod.Output<int>(23) + “<br />”);
C# 108        Response.Write(GenericMethod.Output<DateTime>(DateTime.Now) + “<br />”);
C# 109    }
C# 110}

运转结果
类型:System.Int32;值:23
类型:System.DateTime;值:2007-2-10 22:57:29

泛型委托

C# 111C# 112/**//*—
C# 113 * 如何 使用 泛型委托
C# 114—*/
C# 115using System;
C# 116using System.Collections.Generic;
C# 117
C# 118public class GenericDelegate
C# 119C# 120C# 121{
C# 122    // 声美素佳儿个泛型委托
C# 123    public delegate string OutputDelegate<T>(T t);
C# 124
C# 125    // 定义2个静态方法
C# 126    public static string DelegateFun(string s)
C# 127C# 128    C# 129{
C# 130        return String.Format(“Hello, {0}”, s);
C# 131    }
C# 132
C# 133    // 定义二个静态方法
C# 134    public static string DelegateFun(DateTime dt)
C# 135C# 136    C# 137{
C# 138        return String.Format(“Time, {0}”, dt.ToString());
C# 139    }
C# 140}
C# 141
C# 142
C# 143public partial class Generic_Delegate : System.Web.UI.Page
C# 144C# 145C# 146{
C# 147    protected void Page_Load(object sender, EventArgs e)
C# 148C# 149    C# 150{
C# 151        // 使用泛型委托
C# 152        GenericDelegate.OutputDelegate<string> delegate1
C# 153            = new GenericDelegate.OutputDelegate<string>(GenericDelegate.DelegateFun);
C# 154
C# 155        Response.Write(delegate1(“aabbcc”));
C# 156        Response.Write(“<br />”);
C# 157
C# 158        // 使用泛型委托(匿名形式)
C# 159        GenericDelegate.OutputDelegate<DateTime> delegate2 = GenericDelegate.DelegateFun;
C# 160        Response.Write(delegate2(DateTime.Now));
C# 161    }
C# 162}

运营结果
Hello, aabbcc
Time, 2007-2-10 22:59:26

抽象泛型类,派生约束

C# 163C# 164/**//*—
C# 165 * 怎样 使用 和 继承 抽象泛型类 
C# 166 * 派生约束
C# 167—*/
C# 168using System;
C# 169using System.Collections.Generic;
C# 170
C# 171// 泛型抽象类
C# 172public abstract class GenericParent
C# 173C# 174C# 175{
C# 176    // 泛型抽象方法,重临值为3个泛型,加3个约束使泛型X要继承自泛型Y
C# 177    public abstract X Output<X, Y>(X x, Y y) where X : Y;
C# 178
C# 179    // 泛型抽象方法,再次来到值为贰个string类型,加3个约束使泛型X要继承自泛型Y
C# 180    public abstract string Output2<X>(X x) where X : System.ComponentModel.IListSource;
C# 181}
C# 182
C# 183public class GenericChild : GenericParent
C# 184C# 185C# 186{
C# 187    // 重写抽象类的泛型方法
C# 188    public override T Output<T, Z>(T t, Z z)
C# 189C# 190    C# 191{
C# 192        return t;
C# 193    }
C# 194
C# 195    // 重写抽象类的泛型方法
C# 196    public override string Output2<T>(T t)
C# 197C# 198    C# 199{
C# 200        return t.GetType().ToString();
C# 201    }
C# 202}
C# 203
C# 204
C# 205public partial class Generic_Abstract : System.Web.UI.Page
C# 206C# 207C# 208{
C# 209    protected void Page_Load(object sender, EventArgs e)
C# 210C# 211    C# 212{
C# 213        GenericChild gc = new GenericChild();
C# 214        Response.Write(gc.Output<string, IComparable>(“aaa”, “xxx”));
C# 215        Response.Write(“<br />”);
C# 216
C# 217        Response.Write(gc.Output2<System.Data.DataTable>(new System.Data.DataTable()));
C# 218        Response.Write(“<br />”);
C# 219    }
C# 220}

运营结果
aaa
System.Data.DataTable

泛型接口,派生约束,构造函数约束

C# 221C# 222/**//*—
C# 223 * 怎么样 使用 泛型接口
C# 224 * 派生约束
C# 225 * 构造函数约束(假若实例化的话)
C# 226—*/
C# 227using System;
C# 228using System.Collections.Generic;
C# 229
C# 230// 泛型接口
C# 231public interface IGenericInterface<T>
C# 232C# 233C# 234{
C# 235    T CreateInstance();
C# 236}
C# 237
C# 238// 完结地点泛型接口的泛型类
C# 239// 派生约束where T : TI(T要继承自TI)
C# 240// 构造函数约束where T : new()(T能够实例化)
C# 241public class Factory<T, TI> : IGenericInterface<TI>
C# 242    where T : TI, new()
C# 243C# 244C# 245{
C# 246    public TI CreateInstance()
C# 247C# 248    C# 249{
C# 250        return new T();
C# 251    }
C# 252}
C# 253
C# 254
C# 255public partial class Generic_Interface : System.Web.UI.Page
C# 256C# 257C# 258{
C# 259    protected void Page_Load(object sender, EventArgs e)
C# 260C# 261    C# 262{
C# 263        IGenericInterface<System.ComponentModel.IListSource> factory =
C# 264            new Factory<System.Data.DataTable, System.ComponentModel.IListSource>();
C# 265
C# 266        Response.Write(factory.CreateInstance().GetType().ToString());
C# 267        Response.Write(“<br />”);
C# 268    }
C# 269}
C# 270

运作结果
System.Data.DataTable

其它

C# 271C# 272/**//*—
C# 273 * 泛型 其它
C# 274—*/
C# 275using System;
C# 276using System.Collections.Generic;
C# 277
C# 278// 泛型也得以动用外号
C# 279using MyList = System.Collections.Generic.List<string>;
C# 280
C# 281public partial class Generic_Other : System.Web.UI.Page
C# 282C# 283C# 284{
C# 285    protected void Page_Load(object sender, EventArgs e)
C# 286C# 287    C# 288{
C# 289        MyList ml = new MyList();
C# 290        ml.Add(“aaa”);
C# 291        ml.Add(“bbb”);
C# 292
C# 293        Response.Write(ml[0]);
C# 294        Response.Write(“<br />”);
C# 295        Response.Write(ml[1]);
C# 296
C# 297        // 别的表达
C# 298        // 值类型约束 public class MyClass<T> where T : struct { }
C# 299        // 引用类型约束 public class MyClass<T> where T : class { }
C# 300        // 没有泛型属性
C# 301    }
C# 302}
C# 303

运行结果
aaa
bbb

OK
[源码下载]

相关文章