嵌套的部分类
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 } } } }
或者我们可以使用定义了两个嵌套类的部分的其他文件,但是我们总是需要完全指定定义类类型的位置 。