这些方法签名之间有什么区别?
public void T MyMethod<T>(T parameter)
和
public void T MyMethod<T>(T parameter) where T : class
他们似乎有同样的结果。。。那么where T : class
是做什么的呢?
在第二种方法中,T只能是一个类,不能是结构类型。
参见类型参数约束(C#编程指南):
其中T:类
类型参数必须是引用[class]类型;这也适用于任何类、接口、委托或数组类型。
在第一个中,您可以用非ref类型调用它,例如
MyMethod<int>(10);
这将不适用于第二个版本,因为它只接受ref类型!
没有区别,但T仅限于引用类型。它们只在编译时不同,因为编译器会检查T是否是ref类型。
- 两者都无法编译。您应该使用
void
或T
- 第二种方法不适用于
MyMethod(1)
,因为它需要对T
的引用类型