我有两个类,一个有很多属性,另一个有几个。我需要在较小的类中引用较大类的一些属性,但我想知道单独传递值是否更好。例如:
public class LargeClass
{
private string _var1;
private string _var2;
private string _var3;
//...
private string _var20;
//stuff
}
public class SmallClass
{
private LargeClass _largeclass;
private string _var1;
public SmallClass(LargeClass LargeClass)
{
_largeclass = LargeClass;
_var1 = _largeclass.Var1 + _largeclass.Var2;
}
}
或者,我可以为小班做这个并直接传递我需要的值:
public class SmallClass2
{
private string _var1;
private string _var2;
private string _var3;
public SmallClass2(string Var1, string Var2)
{
_var1 = Var1;
_var2 = Var2;
_var3 = _var1 + _var2;
}
}
基本上,我的问题是其中一个占用的空间较少(在运行和序列化时都是如此)?
更新:我能够重写我的类,以便较小的类对象引用它们的父对象,并发现它在序列化时确实使用了更少的空间。显然,这个结果是个案,但对于我的代码,我基本上将它从小类的每个实例更改为存储文件路径作为字符串,使得类能够使用对父对象的引用动态创建路径字符串
生成的序列化数据文件小了55%。
答案 0 :(得分:2)
在运行时,它们将使用相同数量的空间,因为它们只是引用变量(都指向相同的内存位置)。如果要序列化数据 - 那么通过序列化较大的类,您将看到更多的开销。
答案 1 :(得分:1)
他们将使用几乎相同的内存。通过引用传递会创建一个指向对象的指针,因此除了指针所需的堆空间外,不会使用额外的内存。关于序列化,如果使用标准二进制序列化,选项B可能会占用更少的空间。
答案 2 :(得分:1)
在这种情况下,我不会担心序列化空间(除非你必须序列化数千个实例)。
我会更专注于类型的使用和维护。例如,如果您希望较小的类包含属性的值,就像创建实例时那样,那么我将复制值。否则,我会使用较大类型的引用。这样,较小的类型将获得字段上的所有更改。除非“_var1”和“_var2”永远不会改变,否则我也会用属性替换“_var1 + _var2”。