5

我喜欢使用私有嵌套类,只是它们总是感觉很混乱。通常我将它们放在它们自己的#region中,但我希望它们在位置方面与它们的父类分开,而且我也不想将它们放在单独的文件中。我决定做的是使他们的父类部分化,然后将子类物理放置在文件中的父类之下。

不幸的是,每个文件似乎也不能有多个部分类定义。

(编辑:事实证明,每个文件可以有多个部分;只是表单设计器不喜欢它。)

我真正想做的是(全部在一个文件中):

internal class Parent
{
}

private class Parent.Child1
{
}

private class Parent.Child2
{
}

但似乎我所能做的就是为每个新的子类生成一个新的源文件,或者像这样安排它们:

internal class Parent
{
   private class Child1
   {
   }

   private class Child2
   {
   }
}

有什么办法可以完成我在这里尝试做的事情吗?

4

1 回答 1

8

最接近这种类型的封装是使用部分父类:

internal partial class Parent
{
    private Child1 c1Instance = new Child1();
    private Child2 c2Instance = new Child2();
}

internal partial class Parent
{
    private class Child1
    {
    }
}

internal partial class Parent
{
    private class Child2
    {
    }
}

您可以将它们拆分为多个文件,最终结果将是相同的 -Child1并且Child2将是内部的私有类Parent并且在其他地方无法访问。

有时会让人更加困惑,但我认为这是最接近您想要实现的目标。

澄清

AC# 源文件可以包含任意数量的命名空间,每个命名空间可以包含任意数量的结构和类。

这是一个有效(但不是很实用)的 C# 源文件:

using System;

namespace FirstNS
{
    public class Class1
    {
    }

    public class Class2
    {
    }

    public partial class Parent1
    {
    }

    public partial class Parent1
    {
        private class Child1
        {
        }

        private class Child2
        {
        }
    }
}

namespace FirstNS.ChildNS
{
    public class Class3
    {
    }
}

编译为您提供以下类:

FirstNS.Class1
FirstNS.Class2
FirstNS.Parent1
FirstNS.Parent1.Child1 (private)
FirstNS.Parent1.Child2 (private)
FirstNS.ChildNS.Class3

如果您有理由这样做,您还可以将上面的每个类定义拆分为多个文件。

于 2013-06-06T23:53:49.047 回答