受继承限制的泛型方法和基类参数之间有什么区别?

时间:2018-05-30 10:17:28

标签: c# .net generics inheritance

假设我有以下代码:

public class BaseClass { }
public class DerivedClass : BaseClass { }

public void GenericMethod<T>(T input) where T : BaseClass
{
 //code
}

public void NormalMethod(BaseClass input)
{
 //code
}

我的问题是这两种方法有什么区别?这两种方法都有任何优点或缺点吗?为什么?

2 个答案:

答案 0 :(得分:4)

  

这两种方法有什么区别?

基本上没有。

  

这两种方法都有任何优点或缺点吗?

当您使用非泛型版本时,最好有一点(编译时)性能改进,因为这不需要要编译的特定版本的方法。否则,我无法想到任何重要的事情。

这里使用泛型的用例可能是什么:

  • 何时返回T;
  • T需要从类派生时;
  • 如果您的类使用了类型参数,则可以再次指定所需的类型。

答案 1 :(得分:1)

在您展示的代码中使用泛型是没有意义的。

另一方面,如果您要从该方法返回 T而不是BaseClass,则调用者可以访问T - 特定成员仅在BaseClass上声明的成员(除非他们转换了返回值)。