我目前正在为涉及泛型列表的类设计而苦苦挣扎:
代码超过千字:
class Document
{
public List<Result> Results { get; } = new List<Result>();
}
class Result
{
}
class SpecialDocument : Document
{
public new List<SpecialResult> Results { get; } = new List<SpecialResult>();
}
class SpecialResult : Result
{
}
我不喜欢当前设计的是 SpecialDocument.Results
隐藏 Document.Results
.如果一个人有 Document
在 SpecialDocument
上查看, 根本没有结果,即使有可能是 Result
查看全部SpecialResult
元素。
我想完成的是:
SpecialDocument doc = new SpecialDocument();
doc.Results.Add(new SpecialResult());
Assert.AreEqual(1, (doc as Document).Results.Count); // Here my design obviously fails right now
...我想在不失去类型安全的情况下实现这一点(因为这实际上是 List<T>
不是协变的原因)。
编辑
我忘了说 SpecialDocument
和 Document
实际上需要有相同的后继者(或实现相同的接口(interface)),这样它们才能在一个集合中共存:
List<Document> documents = new List<Document>()
{
new Document(),
new SpecialDocument()
};
最佳答案
你试过泛型吗?
abstract class Document<T> where T : Result
{
public List<T> Results { get; } = new List<T>();
}
abstract class Result
{
}
class SpecialDocument : Document<SpecialResult>
{
}
class SpecialResult : Result
{
}
SpecialDocument
会自动实例化List<SpecialResult>
.
关于c# - 具有泛型列表的类继承设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50220628/