嵌套的部分类

internal partial class Class1 { private class Class2 : ISomething, ISomethingElse { private class Class3 : ISomething { } } } 

我希望Class3本身能够托管另一个私有的Class4,但这会使Class3太大,所以我想让Class3偏向。 我知道如何对非嵌套类执行此操作。 如何在单独的文件中创建嵌套类?

本文指出,即使父类不是部分的,也可以使嵌套类成为局部。 但是你不能将它们分成几个文件,所以我认为你需要将Class2分成几partial ,就像你对第一级类一样分裂,保持partial class层次结构。

我真的希望这个问题只是因为好奇心。

编辑 :刚试过这个 – 工作正常。

file1.cs

 partial class c1 { partial class c2 { class c3 { } } } 

file2.cs

 partial class c1 { partial class c2 { } } 

如果嵌套类需要出于任何原因进行分区,那么所有者类也需要进行分区。 嵌套类代码也是所有者类代码 – 它是一种组合关系。

因此,提取嵌套类的一部分意味着同时提取其所有者的一部分。 反过来,我们需要“查看每个分部类的完整路径”, 以便编译器可以识别完全指定的类型

它与命名空间是一样的 – 与类不同,它们在某种程度上是隐式的,因为我们不希望在同一个文件中有整个命名空间,而我们通常这样做是为了类,特别是嵌套的。

所以通常我们需要在包含嵌套类部分的文件中写入

 MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassA MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassB 

定义如下:

 namespace MyTopNamespace { namespace MyLevel2Namespace { partial class MyTopLevelClass { partial class MyNestedClassA { // Part of definition for our nested class: // MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassA } class MyOtherNestedClassNotPartitioned { ... } partial class MyNestedClassB { // Part of definition for our nested class: // MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassB } } } } 

并在另一个文件中嵌套类的其他部分后缀’A’定义如下:

名称空间MyTopNamespace 
 { 
    命名空间MyLevel2Namespace 
     {
        部分类MyTopLevelClass
         {
            部分类MyNestedClassA
             {
                //我们嵌套类的定义的另一部分:
                // MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassA
             }
        }
     }
 }

并在另一个文件中嵌套类的其他部分后缀’B’定义如下:

名称空间MyTopNamespace 
 { 
    命名空间MyLevel2Namespace 
     {
        部分类MyTopLevelClass
         {
            部分类MyNestedClassB
             {
                //我们嵌套类的定义的另一部分:
                // MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassB
             }
        }
     }
 }

或者我们可以使用定义了两个嵌套类的部分的其他文件,但是我们总是需要完全指定定义类类型的位置