C# 2.0 泛型

[源码下载]

C# 2.0 泛型

作者:webabcd

介绍
泛型是 C# 2.0
的极致有力的效果。通过泛型可以定义类型安全之数据结构,而不用使用实际的数据类型。这会显著提高性并取重新胜似质量之代码,因为您得选用数据处理算法。

泛型类

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

泛型方法

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

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

泛型委托

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

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

虚幻泛型类,派生约束

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

运作结果
aaa
System.Data.DataTable

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

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

运转结果
System.Data.DataTable

其它

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

运作结果
aaa
bbb

OK
[源码下载]

相关文章