在C#中,将所有单独引用的类重写为struct是一种相当好的方法吗



我有一个类,它有很多成员。

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;
}

然后我开始怀疑将ModuleAModuleBModuleC从类改为结构。这严重违反了规定的原则

  1. 结构不应该是可变的
  2. 结构应尽可能小

但我认为这是可以接受的,原因如下:

  1. 对于它们中的每一个,这些实例只会被单个对象引用,因此不必是引用类型,而作为值类型可以通过较少的GC工作来提高性能
  2. 它们不需要被继承
  3. 他们不太可能被装箱

我的想法有意义吗?

我的想法有意义吗?

否。

在类上使用结构没有任何好处,也有许多缺点,除非您绝对需要结构的特性。如果您要分配数千个这样的类型,那么性能只是一个问题。

和所有事情一样,除非你需要,否则不要进行优化,尤其不要进行微观优化。选择结构而不是类无疑是一种微观优化。

这不是一个好主意,相反,您可以使用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

相关内容

最新更新