嵌套分部类
本文关键字:嵌套 | 更新日期: 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 } } }}
或者我们可以有其他文件,其中定义了嵌套类的部分等,但我们总是需要完全指定定义类类型的位置。