【问题标题】:What is the difference between a generic method limited by inheritance and a base class parameter?受继承限制的泛型方法和基类参数有什么区别?
【发布时间】:2018-05-30 10:17:27
【问题描述】:

假设我有以下代码:

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

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

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

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

【问题讨论】:

  • 在那种特殊情况下,使用泛型确实没有任何意义。使用基类就可以了。尽管code 中可能有一些东西可以保证这一点
  • 在这种情况下没有区别,你已经找到了一种完美的方式来做同样的事情 2 种不同的方式
  • 将它们与流式 API 中的方法进行对比,其中方法在执行操作后返回其输入。考虑一下返回类型是什么以及这对流畅的 API 意味着什么。

标签: c# .net generics inheritance


【解决方案1】:

这两种方法有什么区别?

基本没有。

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

当您使用非泛型版本时,充其量只会有轻微的(编译时)性能改进,因为不需要编译特定版本的方法。否则,我想不出什么重要的东西。

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

  • 您何时返回T
  • T 需要从一个类一个接口派生时;
  • 如果您的类使用类型参数,您可以按照该参数再次指定所需的类型。

【讨论】:

  • 谢谢,我想这也是添加泛型的副产品。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多