C# 在类外部编写的嵌套类

C# 在类外部编写的嵌套类,c#,nested-class,partial-classes,C#,Nested Class,Partial Classes,我喜欢使用私有嵌套类,只是它们总是感觉很凌乱。通常我把它们放在它们自己的#区域,但我更希望它们在位置上与它们的父类分开,而且我也不希望它们放在单独的文件中。我决定做的是将它们的父类部分化,然后将子类实际放置在文件中父类的下面 不幸的是,似乎每个文件也不能有多个分部类定义 (编辑:事实证明,每个文件可以有多个部分;只是表单设计器不喜欢它。) 我真正想做的是(全部在一个文件中): 但似乎我所能做的就是为每个新的子类生成一个新的源文件,或者像这样排列它们: internal class Parent

我喜欢使用私有嵌套类,只是它们总是感觉很凌乱。通常我把它们放在它们自己的
#区域
,但我更希望它们在位置上与它们的父类分开,而且我也不希望它们放在单独的文件中。我决定做的是将它们的父类部分化,然后将子类实际放置在文件中父类的下面

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

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

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

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

internal class Parent
{
   private class Child1
   {
   }

   private class Child2
   {
   }
}

有什么方法可以完成我在这里要做的吗?

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

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
内部的私有类,在其他地方无法访问

有时会让人感到困惑,但我认为这是最接近你想要实现的目标

澄清

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

这是一个有效的(但不是很实用的)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

如果有理由,您也可以将上述每个类定义拆分为多个文件。

多个类可以位于同一个文件中(在同一命名空间中),即使不是嵌套的-与Java不同,没有一个[public]类限制。如果您想要父.Child命名关系,那么它们必须是嵌套的,尽管部分类可能会伪造分离。这就是我要做的,但是您需要为每个子类创建一个新文件来完成此操作。我正在寻找一种方法,既不使用许多文件,也不将它们全部放在一个类定义中。(我希望我的一个文件包含一组明确定义的类,即使其中一个是其他类的父类。)这似乎是不可能的。你不需要使用多个文件来实现这一点@Corey的解决方案看起来不错,并且可以在一个.cs中编译所有的类file@Sahuagin如果你愿意,你可以把所有的东西都放在一个文件里,或者在不同的文件中拆分,随您的喜好而定。您可以在同一个文件、多个类等中定义多个名称空间。如果需要将它们拆分,请执行以下操作。当把它们放在一起有意义时,就这样做。@Daniel好的,这似乎是可行的。看起来只有表单设计器阻止您在每个文件中拥有多个部分。非常感谢@DaveCousineau:为了回应您对混乱的担忧:在生成所有单独的文件后,在文本编辑器中打开.csproj文件(Microsoft Power命令扩展支持在Visual Studio中执行此操作)。将
替换为
parent.cs
FirstNS.Class1
FirstNS.Class2
FirstNS.Parent1
FirstNS.Parent1.Child1 (private)
FirstNS.Parent1.Child2 (private)
FirstNS.ChildNS.Class3