我有一个类,它有很多成员。
public class MyClass{
public int ModuleA_Value00;
public int ModuleA_Value01;
public void ModuleAMethod0(){}
public int ModuleB_Value00;
public int ModuleB_Value01;
public int ModuleC_Value00;
public int ModuleC_Value01;
//Just illustration, in fact there should be much more.
}
为了使代码更具可读性,我将类成员分解为几个较小的类,这些类不关心其他类型的工作方式。
public class MyClass{
public ModuleA ModuleA;
public ModuleB ModuleB;
public ModuleC ModuleC;
}
public class ModuleA{
public int Value00;
public int Value01;
public void Method0(){};
}
public class ModuleB{
public int Value00;
public int Value01;
}
public class ModuleC{
public int Value00;
public int Value01;
}
然后我开始怀疑将ModuleA
、ModuleB
和ModuleC
从类改为结构。这严重违反了规定的原则
- 结构不应该是可变的
- 结构应尽可能小
但我认为这是可以接受的,原因如下:
- 对于它们中的每一个,这些实例只会被单个对象引用,因此不必是引用类型,而作为值类型可以通过较少的GC工作来提高性能
- 它们不需要被继承
- 他们不太可能被装箱
我的想法有意义吗?
我的想法有意义吗?
否。
在类上使用结构没有任何好处,也有许多缺点,除非您绝对需要结构的特性。如果您要分配数千个这样的类型,那么性能只是一个问题。
和所有事情一样,除非你需要,否则不要进行优化,尤其不要进行微观优化。选择结构而不是类无疑是一种微观优化。
这不是一个好主意,相反,您可以使用c#中的Partial Classes
概念。这将允许您维护单个类,但将其隔离在不同的文件中,并且易于阅读。
分部类与对象继承无关。分部类只是将定义类的源代码拆分为单独文件的一种方式
您可以在不同的文件中创建这些类:
例如。MyClass.cs
public partial class MyClass{
public int ModuleA_Value00;
public int ModuleA_Value01;
}
MyClass1.cs
public partial class MyClass{
public void ModuleAMethod0(){}
public int ModuleB_Value00;
}
MyClass2.cs
public partial class MyClass{
public int ModuleB_Value01;
public int ModuleC_Value00;
public int ModuleC_Value01;
}
在应用程序中开发分部类时,需要注意以下几点
- 您需要在分部类的每个部分中使用分部关键字
- 分部类的每个部分的名称应该相同,但分部类的各个部分的源文件名可以不同
- 分部类的所有部分都应该在同一个命名空间中
- 分部类的每个部分都应该在同一个程序集或DLL中,换句话说,你不能在不同类库项目的源文件中创建分部类
- 分部类的每个部分都具有相同的可访问性
- 如果在分部类上继承一个类或接口,那么它将在分部类的所有部分上继承
- 如果一个分部类的一部分被密封,那么整个类将被密封
- 如果分部类的一部分是抽象的,那么整个类将是一个抽象类
Microsoft Link