“什么是”呢;式中T:class";在C#通用方法中?

“什么是”呢;式中T:class";在C#通用方法中?,c#,generics,C#,Generics,这些方法签名之间有什么区别 public void T MyMethod<T>(T parameter) public void T MyMethod(T参数) 及 public void T MyMethod(T参数),其中T:class 他们似乎有相同的结果。。。那么其中T:class做什么呢?在第二种方法中,T只能是类,不能是结构类型 见: T:在哪里上课 类型参数必须是引用[class]类型;这也适用于任何类、接口、委托或数组类型 没有区别,但T仅限于引用类型。 它们仅

这些方法签名之间有什么区别

public void T MyMethod<T>(T parameter)
public void T MyMethod(T参数)

public void T MyMethod(T参数),其中T:class

他们似乎有相同的结果。。。那么
其中T:class
做什么呢?

在第二种方法中,T只能是类,不能是结构类型

见:

T:在哪里上课

类型参数必须是引用[class]类型;这也适用于任何类、接口、委托或数组类型


没有区别,但T仅限于引用类型。
它们仅在编译时不同,因为编译器会检查T是否为ref类型。

在第一种情况下,您可以使用非ref类型调用它

MyMethod<int>(10);
MyMethod(10);
这将不适用于第二个版本,因为它只接受ref类型

  • 两者都不会编译。您应该使用
    void
    T
  • 第二种方法不适用于
    MyMethod(1)
    ,因为它需要
    t
  • 什么是不清楚的?那么有一个区别;-)我想知道它们是否发出相同的IL(例如,是否保留了该信息?)
    MyMethod<int>(10);