假设我有以下代码:
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
上声明的成员(除非他们强制转换返回值(。