在类外部编写的嵌套类
本文关键字:嵌套 外部 | 更新日期: 2023-09-27 18:17:15
我喜欢使用私有嵌套类,只是它们总是让人感觉很混乱。通常我把它们放在它们自己的#region
中,但是我更希望它们在位置上与它们的父类分开,而且我也不希望它们在单独的文件中。我决定做的是使它们的父类成为partial,然后在文件中将子类物理地放在父类的下面。
不幸的是,似乎每个文件也不能有多个部分类定义
(编辑:事实证明,每个文件可以有多个部分;只是表单设计人员不喜欢它。)
我真正想做的是(在一个文件中):
internal class Parent
{
}
private class Parent.Child1
{
}
private class Parent.Child2
{
}
,但似乎我所能做的就是为每个新的子类生成一个新的源文件,或者像这样排列它们:
internal class Parent
{
private class Child1
{
}
private class Child2
{
}
}
有什么方法可以完成我在这里要做的事情吗?
最接近这种类型的封装是使用部分父类:
internal partial class Parent
{
private Child1 c1Instance = new Child1();
private Child2 c2Instance = new Child2();
}
internal partial class Parent
{
private class Child1
{
}
}
internal partial class Parent
{
private class Child2
{
}
}
您可以将这些文件拆分为多个文件,最终结果将是相同的- Child1
和Child2
将是Parent
内部的私有类,并且在其他地方不可访问。
有时会让人有点困惑,但我认为这是最接近你想要达到的目标的。
澄清
c#源文件可以包含任意数量的命名空间,每个命名空间可以包含任意数量的结构体和类。
这是一个有效的(但不是很实用)c#源文件:
using System;
namespace FirstNS
{
public class Class1
{
}
public class Class2
{
}
public partial class Parent1
{
}
public partial class Parent1
{
private class Child1
{
}
private class Child2
{
}
}
}
namespace FirstNS.ChildNS
{
public class Class3
{
}
}
编译得到以下类:
FirstNS.Class1
FirstNS.Class2
FirstNS.Parent1
FirstNS.Parent1.Child1 (private)
FirstNS.Parent1.Child2 (private)
FirstNS.ChildNS.Class3
如果有必要的话,还可以将上面的每个类定义拆分为多个文件。