C# 2.0 泛型

[源码下载]


C# 2.0 泛型


作者: webabcd


介绍
泛型是 C# 2.0 的最强大的功能。通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型。这能够显著提高性能并得到更高质量的代码,因为您可以重用数据处理算法。


泛型类
InBlock.gif /*--- 
InBlock.gif * 如何 使用 和 继承 泛型类 
InBlock.gif---*/
 
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif 
InBlock.gif // 泛型类 
InBlock.gif public  class GenericClass<T> 
InBlock.gif
InBlock.gif         // 返回泛型的具体类型和ToString()后的值 
InBlock.gif         public  virtual  string Output(T t) 
InBlock.gif        { 
InBlock.gif                 return  "类型:" + t.GetType().ToString() +  ";值:" + t.ToString(); 
InBlock.gif        } 
InBlock.gif
InBlock.gif 
InBlock.gif // 继承自一个泛型类,指定基类的泛型的具体类型 
InBlock.gif public  class InheritClass1 : GenericClass< string
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif 
InBlock.gif // 继承自一个泛型类,基类和子类都是同一泛型 
InBlock.gif public  class InheritClass2<T> : GenericClass<T> 
InBlock.gif
InBlock.gif         public  override  string Output(T t) 
InBlock.gif        { 
InBlock.gif                 return  "子类实现-类型:" + t.GetType().ToString() +  ";值:" + t.ToString(); 
InBlock.gif        } 
InBlock.gif
InBlock.gif 
InBlock.gif // 继承自一个泛型类,指定基类的泛型的具体类型,子类仍然可以是泛型 
InBlock.gif public  class InheritClass3<Z> : GenericClass< double
InBlock.gif
InBlock.gif         public  string ChildOutput(Z z) 
InBlock.gif        { 
InBlock.gif                 return  "子类实现-类型:" + z.GetType().ToString() +  ";值:" + z.ToString(); 
InBlock.gif        } 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif public partial  class Generic_Class : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                GenericClass<DateTime> c =  new GenericClass<DateTime>(); 
InBlock.gif                Response.Write(c.Output(DateTime.Now) +  "<br />"); 
InBlock.gif 
InBlock.gif                InheritClass1 c1 =  new InheritClass1(); 
InBlock.gif                Response.Write(c1.Output( "abc") +  "<br />"); 
InBlock.gif 
InBlock.gif                GenericClass<Guid> c2 =  new InheritClass2<Guid>(); 
InBlock.gif                Response.Write(c2.Output( new Guid()) +  "<br />"); 
InBlock.gif 
InBlock.gif                InheritClass3< int> c3 =  new InheritClass3< int>(); 
InBlock.gif                Response.Write(c3.Output(Math.PI) +  " ||| " + c3.ChildOutput(123) +  "<br />"); 
InBlock.gif        } 
InBlock.gif}
 
运行结果
类型: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


泛型方法
InBlock.gif /*--- 
InBlock.gif * 如何 使用 泛型方法    
InBlock.gif---*/
 
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif 
InBlock.gif public  class GenericMethod 
InBlock.gif
InBlock.gif         // 静态 泛型方法 
InBlock.gif         public  static  string Output<T>(T t) 
InBlock.gif        { 
InBlock.gif                 return  "类型:" + t.GetType().ToString() +  ";值:" + t.ToString(); 
InBlock.gif        } 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif public partial  class Generic_Method : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                Response.Write(GenericMethod.Output< int>(23) +  "<br />"); 
InBlock.gif                Response.Write(GenericMethod.Output<DateTime>(DateTime.Now) +  "<br />"); 
InBlock.gif        } 
InBlock.gif}
 
运行结果
类型:System.Int32;值:23
类型:System.DateTime;值:2007-2-10 22:57:29


泛型委托
InBlock.gif /*--- 
InBlock.gif * 如何 使用 泛型委托 
InBlock.gif---*/
 
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif 
InBlock.gif public  class GenericDelegate 
InBlock.gif
InBlock.gif         // 声明一个泛型委托 
InBlock.gif         public  delegate  string OutputDelegate<T>(T t); 
InBlock.gif 
InBlock.gif         // 定义一个静态方法 
InBlock.gif         public  static  string DelegateFun( string s) 
InBlock.gif        { 
InBlock.gif                 return String.Format( "Hello, {0}", s); 
InBlock.gif        } 
InBlock.gif 
InBlock.gif         // 定义一个静态方法 
InBlock.gif         public  static  string DelegateFun(DateTime dt) 
InBlock.gif        { 
InBlock.gif                 return String.Format( "Time, {0}", dt.ToString()); 
InBlock.gif        } 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif public partial  class Generic_Delegate : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                 // 使用泛型委托 
InBlock.gif                GenericDelegate.OutputDelegate< string> delegate1 
InBlock.gif                        =  new GenericDelegate.OutputDelegate< string>(GenericDelegate.DelegateFun); 
InBlock.gif 
InBlock.gif                Response.Write(delegate1( "aabbcc")); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif 
InBlock.gif                 // 使用泛型委托(匿名方法) 
InBlock.gif                GenericDelegate.OutputDelegate<DateTime> delegate2 = GenericDelegate.DelegateFun; 
InBlock.gif                Response.Write(delegate2(DateTime.Now)); 
InBlock.gif        } 
InBlock.gif}
 
运行结果
Hello, aabbcc
Time, 2007-2-10 22:59:26


抽象泛型类,派生约束
InBlock.gif /*--- 
InBlock.gif * 如何 使用 和 继承 抽象泛型类    
InBlock.gif * 派生约束 
InBlock.gif---*/
 
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif 
InBlock.gif // 泛型抽象类 
InBlock.gif public  abstract  class GenericParent 
InBlock.gif
InBlock.gif         // 泛型抽象方法,返回值为一个泛型,加一个约束使泛型X要继承自泛型Y 
InBlock.gif         public  abstract X Output<X, Y>(X x, Y y) where X : Y; 
InBlock.gif 
InBlock.gif         // 泛型抽象方法,返回值为一个string类型,加一个约束使泛型X要继承自泛型Y 
InBlock.gif         public  abstract  string Output2<X>(X x) where X : System.ComponentModel.IListSource; 
InBlock.gif
InBlock.gif 
InBlock.gif public  class GenericChild : GenericParent 
InBlock.gif
InBlock.gif         // 重写抽象类的泛型方法 
InBlock.gif         public  override T Output<T, Z>(T t, Z z) 
InBlock.gif        { 
InBlock.gif                 return t; 
InBlock.gif        } 
InBlock.gif 
InBlock.gif         // 重写抽象类的泛型方法 
InBlock.gif         public  override  string Output2<T>(T t) 
InBlock.gif        { 
InBlock.gif                 return t.GetType().ToString(); 
InBlock.gif        } 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif public partial  class Generic_Abstract : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                GenericChild gc =  new GenericChild(); 
InBlock.gif                Response.Write(gc.Output< string, IComparable>( "aaa""xxx")); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif 
InBlock.gif                Response.Write(gc.Output2<System.Data.DataTable>( new System.Data.DataTable())); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif        } 
InBlock.gif}
 
运行结果
aaa
System.Data.DataTable


泛型接口,派生约束,构造函数约束
InBlock.gif /*--- 
InBlock.gif * 如何 使用 泛型接口 
InBlock.gif * 派生约束 
InBlock.gif * 构造函数约束(如果实例化的话) 
InBlock.gif---*/
 
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif 
InBlock.gif // 泛型接口 
InBlock.gif public  interface IGenericInterface<T> 
InBlock.gif
InBlock.gif        T CreateInstance(); 
InBlock.gif
InBlock.gif 
InBlock.gif // 实现上面泛型接口的泛型类 
InBlock.gif // 派生约束where T : TI(T要继承自TI) 
InBlock.gif // 构造函数约束where T : new()(T可以实例化) 
InBlock.gif public  class Factory<T, TI> : IGenericInterface<TI> 
InBlock.gif        where T : TI,  new() 
InBlock.gif
InBlock.gif         public TI CreateInstance() 
InBlock.gif        { 
InBlock.gif                 return  new T(); 
InBlock.gif        } 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif public partial  class Generic_Interface : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                IGenericInterface<System.ComponentModel.IListSource> factory = 
InBlock.gif                         new Factory<System.Data.DataTable, System.ComponentModel.IListSource>(); 
InBlock.gif 
InBlock.gif                Response.Write(factory.CreateInstance().GetType().ToString()); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif        } 
InBlock.gif}
 
运行结果
System.Data.DataTable


其它
InBlock.gif /*--- 
InBlock.gif * 泛型 其它 
InBlock.gif---*/
 
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif 
InBlock.gif // 泛型也可以使用别名 
InBlock.gif using MyList = System.Collections.Generic.List< string>; 
InBlock.gif 
InBlock.gif public partial  class Generic_Other : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                MyList ml =  new MyList(); 
InBlock.gif                ml.Add( "aaa"); 
InBlock.gif                ml.Add( "bbb"); 
InBlock.gif 
InBlock.gif                Response.Write(ml[0]); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif                Response.Write(ml[1]); 
InBlock.gif 
InBlock.gif                 // 其它说明 
InBlock.gif                 // 值类型约束 public class MyClass<T> where T : struct { } 
InBlock.gif                 // 引用类型约束 public class MyClass<T> where T : class { } 
InBlock.gif                 // 没有泛型属性 
InBlock.gif        } 
InBlock.gif}
 
 
运行结果
aaa
bbb


OK
[源码下载]



     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/345403,如需转载请自行联系原作者





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值