嵌套的部分类

时间:2012-02-04 17:59:17

标签: c#

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

        }
    }
}

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

2 个答案:

答案 0 :(得分:22)

这个article声明即使它们的父类不是部分的,也可以创建嵌套类partial。但是你不能在几个文件中将它们分开,所以我认为你也需要使Class2 partial和你的第一级类一样分裂,保持partial class层次结构

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

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

file1.cs

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

file2.cs

partial class c1 
{
    partial class c2 
    {
    }
}

答案 1 :(得分:1)

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

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

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

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

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'定义如下:

namespace MyTopNamespace 
{ 
    namespace MyLevel2Namespace 
    {
        partial class MyTopLevelClass
        {
            partial class MyNestedClassA
            {
               // Another part of definition for our nested class:
               // MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassA
            }
       }
    }
}

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

namespace MyTopNamespace 
{ 
    namespace MyLevel2Namespace 
    {
        partial class MyTopLevelClass
        {
            partial class MyNestedClassB
            {
               // Another part of definition for our nested class:
               // MyTopNamespace.MyLevel2Namespace.MyTopLevelClass.MyNestedClassB
            }
       }
    }
}

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