泛型——卐解(二)

简介:
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的影响?不过理解起来果然有共通性。









本文转自 王杰瑞 51CTO博客,原文链接:http://blog.51cto.com/wangjierui/40862,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
安全 算法 Java
深入理解泛型
深入理解泛型
|
6月前
|
安全 编译器 Scala
何时需要指定泛型:Scala编程指南
本文是Scala编程指南,介绍了何时需要指定泛型类型参数。泛型提供代码重用和类型安全性,但在编译器无法推断类型、需要提高代码清晰度、调用泛型方法或创建泛型集合时,应明确指定类型参数。通过示例展示了泛型在避免类型错误和增强编译时检查方面的作用,强调了理解泛型使用时机对编写高效Scala代码的重要性。
45 1
何时需要指定泛型:Scala编程指南
|
6月前
|
存储 算法 容器
什么是泛型?
什么是泛型?
25 0
|
6月前
什么是泛型,泛型的具体使用?
什么是泛型,泛型的具体使用?
35 0
|
存储 算法 编译器
泛型的讲解
泛型的讲解
59 0
|
Java 编译器
|
编译器 C#
C# 泛型
C# 泛型
61 0
|
Java 编译器 API
泛型-详解
泛型-详解
124 0
泛型-详解
|
安全 Java 编译器
你了解泛型吗?
面向对象编程中,多态算是一种泛化机制。你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性。此外,如果将方法参数声明为接口,将会更加灵活。
|
存储 Java 编译器
一文带你玩转“泛型“
一文带你玩转“泛型“
154 0
一文带你玩转“泛型“