我画了一个空白,我需要如何构建这些类来获得我想要的东西 - 这里是我所得到的简化版本:
public abstract class DocumentBase
{
public abstract class IndexingBase
{
public string universalField;
}
public IndexingBase myIndex;
}
public class ATypeOfDocument : DocumentBase
{
public class Indexing : DocumentBase.IndexingBase
{
public string nonUniversalField;
}
public ATypeOfDocument()
{
this.myIndex = new Indexing();
}
}
哪个有效,但我无法访问nonUniversalField - 因为我通过MyInstanceOfATypeOfDocument.myIndex访问它,它被声明为IndexingBase。我尝试添加' public new Indexing myIndex'在ATypeOfDocument中,但是这引起了各种各样的问题(最重要的是在ATypeOfDocument的实例中有两个索引结构。)
我想我正在寻找的是这个代码可以工作:
ATypeOfDocument specDoc = new ATypeOfDocument();
DocumentBase baseDoc = new ATypeOfDocument();
specDoc.myIndex.nonUniversalField = "asdf";
specDoc.myIndex.universalField = "asdf";
baseDoc.myIndex.universalField = "asdf";
// ((ATypeOfDocument)baseDoc).myIndex.universalField should be "asdf"
另外,如果我遗漏了任何内容或者没有正确发布,我道歉;这是我在Stack Exchange上的第一个问题。
答案 0 :(得分:0)
您错过了另一个演员来访问nonUniversalField
,即myIndex
到ATypeOfDocument.Indexing
:
((ATypeOfDocument.Indexing)((ATypeOfDocument)baseDoc).myIndex).nonUniversalField
答案 1 :(得分:0)
我会从他们所包含的课程中删除IndexingBase
和Indexing
,然后将它们分开。将它们声明为嵌套类会产生您尝试解决的问题,但您获得的回报是什么?
嵌套类的目的是隐藏内部类,它是外部类的实现细节,与隐藏私有变量和方法的方式相同。在实践中,我不认为大多数程序员经常使用它们。 (也许有些开发人员喜欢它们。)但是第二个它增加了复杂性并迫使你解决这样的问题然后根本没有任何好处。