差值T Get <t>(int id)和T Get(int id)</t>

时间:2012-06-25 11:28:01

标签: c# .net entity-framework generics

任何人都可以告诉我

之间的区别
public T Get<T>(int id)

public T Get(int id)

3 个答案:

答案 0 :(得分:7)

比较

class First
{
    public T Get<T>(int id) // T is declared in the method scope
    {
    }
}

class Second<T>
{
    public T Get(int id) // T is declared in the class scope
    {
    }
}

还有第三种情况:

class Third<U>
{
    public T Get<T>(int id) // T is declared in the method scope when class scope has another generic argument declared
    {
    }
}

答案 1 :(得分:4)

不同之处在于,如果之前未定义T,则使用第一种类型的声明。即

public class MyClass
{
    public T Get<T>(int id);
}

当T已经在班级定义时,第二个。即

public class MyClass<T>
{
    public T Get(int id);
}

在这种情况下,您还可以使用第一种声明 - 这实际上是速记。效果没有区别。

编辑实际上,第二个声明只要求T在范围内,另一个例子是嵌套类,如...

public class MyClass<T>
{
  public class NestedClass
  {
    public T Get(int i);
  }
}

答案 2 :(得分:0)

在您可以在代码中使用它们之前,请阅读Generics