泛型对于解决面对对象编程的算法设计可以提高其运算速度,但是对于引用类型来说还是没什么差别,因为引用类型只是指针的地址的调用,简单来说泛型还是挺好理解的,但是对于泛型、非泛型、继承和接口的融合就有些迷惑了。 #
比如说这种接口 #
public interface IEnumeratot<T>:IDisposable,IEnumerator,ICompare<T>
这个泛型接口继承了两个非泛型接口,和一个泛型接口。 #
我一开始理解泛型就是一个个模型,只要我们把类型一个参数赋给他,他就能生成一个标准的类型,他缺少的只是一个参数而已,我们引用的时候感觉就像我们引用一个“全体方法”,把参数赋给类型后就可以一直调用类中的方法了,但是对于接口的继承如何理解? #
对于泛型类的继承,继承的类必须实现泛型的参数或者保留泛型的参数,比如下面
public class A<T>
{
public T tt;
}
public class C<T> : A<T>
{
public T tt;
}
或者是这样
public class A<T>
{
public T tt;
}
public class C : A<string>
{
C cc;
}
对于泛型继承非泛型类,比如下面
public class A
{
A aa;
}
public class B<T>:A
{
B<T> bb;
}
基类是非泛型,而继承的是泛型类,我感觉这种构造就是让泛型类多了一种包容性,比如下面的链表实现的代码,让基类是非泛型,而继承是泛型,就能让链表可以连起很多种类型的数据,而本身的类型安全没有丢失。
public class Node
{
pretected Node next;
public Node(Node next){
this.next=next;
}
}
public class TypeNode<T>:Node
{
public T data ;
public TypeNode(T data):this(data ,null){
}
public TypeNode(T data,Node next):base(next){
this.data=data;
}
}
泛型的约束