【问题标题】:How to use polymorphism in generic classes如何在泛型类中使用多态性
【发布时间】:2023-03-29 16:00:01
【问题描述】:

我想知道这个问题是否有效,我的代码如下:

我将使用多态性的通用类:

public class Foo<T> where T : fatherClass
{
   public T FooMethod1()
   {
     //enter code here
   }

   public void FooMethod2(T value)
   {
     //enter code here
   }
}

父类为父类的实体类

public class childClass1 : fatherClass
{
   //Attributes
}

public class childClass2 : fatherClass
{
   //Attributes
}

父类是泛型类(Foo)的具体类

public class FooIn1 : Foo<childClass1>
{ }

public class FooIn2 : Foo<childClass2>
{ }

试用代码:

class Program()
{
   public static Main(string[] args)
   {
      Foo<fatherClass> util;
      util = new FooIn1();
      util = new FooIn2();
   }
}

在这种情况下可以使用继承吗?

【问题讨论】:

    标签: c# generics inheritance polymorphism


    【解决方案1】:

    在这种情况下可以使用继承吗?

    不,不是。类不支持协变和逆变。想象一下,您有以下情况:

    List<ParentClass> parents = new List<Child1>();
    parents.Add(new Child2());
    

    这不是类型安全的。出于同样的原因,您不能在需要 ParentClass 的地方创建 FooIn1

    【讨论】:

      【解决方案2】:

      您不能在泛型定义中使用父类型,然后将其初始化为具有子泛型类型的列表。相反,您可以根据父类型创建通用列表。然后,您可以将其子类型的任何成员放入列表中。枚举列表时,您必须使用 is 运算符检查对象是否属于哪个子类型。

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多