在抽象类中使用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 { ... }
-
您需要标记AbstractClass
abstract
,因为它包含抽象属性 -
在
AbstractClass
声明中指定generics类型 -
使用
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(); } } }