一般静态方法遵守施加于它们在类级别使用的一般类型参数的所有约束。就像实例方法一样,您可以为由静态方法定义的一般类型参数提供约束:
public class MyClass { public static T SomeMethod(T t) where T : IComparable {...} }
C# 中的运算符只是静态方法而已,并且 C# 允许您为自己的一般类型重载运算符。假设代码块 3 的一般 LinkedList 提供了用于串联链表的 + 运算符。+ 运算符使您能够编写下面这段优美的代码:
LinkedList list1 = new LinkedList(); LinkedList list2 = new LinkedList(); ... LinkedList list3 = list1+list2;
代码块 7 显示 LinkedList 类上的一般 + 运算符的实现。请注意,运算符不能定义新的一般类型参数。
代码块 7. 实现一般运算符
public class LinkedList { public static LinkedList operator+(LinkedList lhs, LinkedList rhs) { return concatenate(lhs,rhs); } static LinkedList concatenate(LinkedList list1, LinkedList list2) { LinkedList newList = new LinkedList(); Node current; current = list1.m_Head; while(current != null) { newList.AddHead(current.Key,current.Item); current = current.NextNode; } current = list2.m_Head; while(current != null) { newList.AddHead(current.Key,current.Item); current = current.NextNode; } return newList; } //Rest of LinkedList }
一般委托 在某个类中定义的委托可以利用该类的一般类型参数。例如:
public class MyClass { public delegate void GenericDelegate(T t); public void SomeMethod(T t) {...} }
在为包含类指定类型时,也会影响到委托:
MyClass obj = new MyClass(); MyClass.GenericDelegate del;
del = new MyClass.GenericDelegate(obj.SomeMethod); del(3);
C# 2.0 使您可以将方法引用的直接分配转变为委托变量:
MyClass obj = new MyClass(); MyClass.GenericDelegate del;
del = obj.SomeMethod;
|