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



假设我有以下代码:

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

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

这两种方法有什么区别?

基本上没有。

这两种方法有什么优点或缺点吗?

当您使用非泛型版本时,充其量只是略微(编译时(性能改进,因为这不需要编译方法的特定版本。否则,我能想到什么重要的事情。

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

  • 当你回来T
  • ;
  • T需要从类接口派生时;
  • 如果您的类使用类型参数,则可以再次指定所需的类型。

在显示的代码中使用泛型毫无意义。

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

最新更新