在抽象类中使用泛型

tha*_*awg 20 c# generics abstraction

我正在开发一个抽象类,其中实现类需要实现T的列表.问题是这不起作用:

public class AbstractClass
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass
{
    public List<Widgets> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我确信有一个明显的答案,我缺少,我知道我可以构建一个抽象的基类型放入列表,但是当我使用我的Linq命令来构建列表时,抽象类型(ItemBase) )与.ToList()方法不能很好地配合.我正在努力做到这么独特吗?

Nic*_*ver 33

您还需要在类上声明,以了解类型T:

public abstract class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public List<Widgets> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你也可以限制T可以,比如说它必须实现IWidgets:

public class AbstractClass<T> where T : IWidgets
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记在类声明行本身添加`abstract`关键字,而不仅仅是属性. (2认同)

Mar*_*ers 9

  • 你需要声明类型T.
  • 您需要将AbstractClass类声明为抽象.
  • 您需要使用override关键字.

试试这个:

public class Widgets { }

public abstract class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public override List<Widgets> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 5

你需要制作AbstractClass通用的

public class AbstractClass<T> {
  ...
}

public class Container : AbstractClass<Widgets> { ...
}
Run Code Online (Sandbox Code Playgroud)