考虑这种情况。
public abstract class DocumentBase
{
public int Index { get; set; }
}
public class Document<T> : DocumentBase where T : class
{
//Items which are to be inserted into a table on the document
private List<T> TableItems;
public Document(int index, List<T> tableItems)
{
Index = index;
TableItems = tableItems;
}
}
然后我创建了一个DocumentBase列表,但是在列表中填入了“Document”类型,每个项目的泛型都不同。
var documents = new List<DocumentBase>();
var documentContentsType1 = new List<DocumentContentType1> { new DocumentContentType1("docInfo1") };
var documentContentsType2 = new List<DocumentContentType2> { new DocumentContentType2("docInfo2") };
var documentType1 = new Document<DocumentContentType1>(1, documentContentsType1);
var documentType2 = new Document<DocumentContentType2>(2, documentContentsType2);
documents.Add(documentType1);
documents.Add(documentType2);
所以我在文档库列表中添加了两种不同的文档类型。
我现在想要访问每个列表的Document类的属性。例如,documents[0].TableItems
我只能从DocumentsBase访问属性,这是可以理解的。
我可以在设置中更改哪些内容来解决此问题?
答案 0 :(得分:2)
你可以在DocumentBase
中声明抽象方法,然后在子类中覆盖它,这样它就会返回一些关于对象的信息(它会是一种getter)。我无法想到任何其他方式。
答案 1 :(得分:0)
有些人可能会添加一个继承自DocumentBase但不属于Document类的类的对象。
你能做的是:
documents.OfType<Document<DocumentBaseType>>().ToList()[0].TableItems
public abstract class DocumentBaseType{}
使您的DocumentType1和DocumentType2扩展DocumentBaseType