嵌套分部类

本文关键字:嵌套 | 更新日期: 2023-09-27 18:22:35

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

我想Class3自己举办另一家私人Class4,但这会使Class3太大,所以我想Class3部分。我知道如何对非嵌套类执行此操作。如何在单独的文件中使嵌套类部分化?

嵌套分部类

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

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

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

文件1.cs

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

文件2.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            }       }    }}

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