代码之家  ›  专栏  ›  技术社区  ›  StayOnTarget

使用泛型类型参数vs使用其类型约束?

  •  0
  • StayOnTarget  · 技术社区  · 5 年前

    假设我有一个这样的类结构,其中 Foo 是类层次结构上的泛型 Base , Derived1 等等。

    abstract class Base {...}
    
    class Derived1 : Base {...}
    
    .
    .
    .
    
    class Derivedn : Base {...}
    
    
    class Foo<T> where T : Base
    {
       /// XXX is a placeholder - see below
       void DoBar(XXX arg) {...}
       ...
    }
    

    想要 DoBar() 操作 源于 底座 , 如果 XXX 底座 或是 T ?

    约束意味着 T型 必须是 底座 或其子女;但在 多巴() 它会把它当作 底座 不管怎样,表面上看这都没什么区别。但我可能忽略了一些更微妙的东西。

    1 回复  |  直到 5 年前
        1
  •  3
  •   Dusan Radovanovic    5 年前

    如果你设置 xxx Base 方法参数不能是 底座 或任何派生自 底座 . 如果你设置 xxx公司 T 方法参数不能是 T型 类或任何派生自 T型 .

    所以如果你实例化 Foo 类的泛型类型为 Derived1 例如,在第一种情况下,您可以使用 底座 或派生自 底座 在第二种情况下,你只能使用 嘲笑1 或派生自 嘲笑1