在抽象类中使用generics

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

public class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public List Items { get; set; } } 

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

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

 public abstract class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public List Items { get; set; } } 

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

 public class AbstractClass where T : IWidgets 
  • 你需要声明类型T.
  • 您需要将AbstractClass类声明为抽象。
  • 您需要使用override关键字。

试试这个:

 public class Widgets { } public abstract class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public override List Items { get; set; } } 

您需要使AbstractClass通用的

 public class AbstractClass { ... } public class Container : AbstractClass { ... } 
  1. 您需要标记AbstractClass abstract ,因为它包含抽象属性

  2. AbstractClass声明中指定generics类型

  3. 使用override实现abstract属性

public abstract class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public override List Items { get; set; } }
public abstract class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public override List Items { get; set; } } 

你需要像这样定义T.

 public class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public List Items { get; set; } } 

您需要在抽象类中指定类型:

 public class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public List Items { get; set; } } 

您缺少为AbstractClass类定义abstract关键字,还需要为Container Class Items属性添加override关键字。 我给出了肯定会运行的示例代码。

 namespace AbstractGeneric { public abstract class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Widgets { public int ID { get; set; } public string Name { get; set; } } public class Container : AbstractClass { public override List Items { get; set; } public Container() { Items = new List(); } } class Program { static void Main(string[] args) { Container c = new Container(); c.Items.Add(new Widgets() { ID = 1, Name = "Sample Widget 1" }); c.Items.Add(new Widgets() { ID = 2, Name = "Sample Widget 2" }); foreach (Widgets item in c.Items) { Console.WriteLine(item.ID + " : " + item.Name); } Console.ReadLine(); } } }