嵌套 class 的结构化 (C#)

Structuring for nested class (C#)

我正在画一个空白,我需要如何构建这些 类 才能得到我想要的东西 - 这是我所得到的东西的简化版本:

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。我尝试在 ATypeOfDocument 中添加 'public new Indexing myIndex',但这导致了各种各样的问题(最大的问题是 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 上的第一个问题。

您缺少另一个访问 nonUniversalField 的转换,即 myIndexATypeOfDocument.Indexing:

((ATypeOfDocument.Indexing)((ATypeOfDocument)baseDoc).myIndex).nonUniversalField

我会从 classes 中删除 IndexingBaseIndexing,它们包含在 classes 中,只是将它们分开 classes。将它们声明为嵌套 classes 会产生您要解决的问题,但您在 return 中获得什么好处?

嵌套 classes 的目的是隐藏内部 class,它是外部 class 的一个实现细节,对外部的一切都隐藏,就像 private变量和方法是隐藏的。在实践中,我认为大多数程序员并不经常使用它们。 (也许有些开发人员喜欢它们。)但是一旦它增加了复杂性并迫使您解决这样的问题,那么它就没有任何好处了。