泛型——卐解(二)
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wangjierui.blog.51cto.com/186879/40862 |
C#除可单独声明泛型类型(类或者结构)外,还可以在基类中包含泛型类型的声明。
基类如果是泛型类,其类型参数 1.已实例化 例:class A:B<string>{} 2.来源于子类(同样是泛型类型) 例:class A<U>:B<U>{} 这个规则也适应与泛型接口,毕竟接口和类有太多的相似之处。 思考题:以下哪个不合法? class A<U,V>:B<string,int>{} class A:B<U,V>{} class A<U>:B<V> 答案的验证很简单,在代码中写以下,然后编译一下就可以了。^_^ 泛型类型的成员可以使用泛型类型声明中的类型参数。再看一下第一篇中提到的例子: public class Generic<T> { public T Field;//这里的T和<T>属于一个T } 类型参数如果没有约束,则只能在该类型上使用从object继承的共有成员。关于约束会在下面说到。 泛型方法也是个很酷的功能,不过C#不支持除方法外其他类成员包含类型参数 再来个例子吧,有些朋友没有例子就吃不下饭,呵呵。 public class Finder{ public static int Find<T>(T ivar){ if(ivar==1) return 0; else return -1 } } //调用代码如下 int i=Finder.Find<int>(0); 对于泛型方法的冲载有必要提一下,借机理解一下占位符T,U,V等 //以下不能构成重载 void F1<T>(int num) void F1<U>(int num) 其实对于占位符T和U来说只是个标记,你可以命名为aa,bb都行,y=f(x)和y=f(t)没有差别,属于同一个函数,不是吗?数学,数学!!! 最后说一下约束。显示约束就是where子句表达式,看一个例子: public class GenericList<T> where T : Employee
它实现类型为 T 的所有项都保证是 Employee 对象或从 Employee 继承的对象,这里用where关键字,难道是受SQL的影响?不过理解起来果然有共通性。本文出自 “王杰瑞的技术博客” 博客,请务必保留此出处http://wangjierui.blog.51cto.com/186879/40862 本文出自 51CTO.COM技术博客 |



王杰瑞
博客统计信息
热门文章
最新评论
友情链接