当您在另一个类中引用一个类时,实际发送/保存了多少数据?

时间:2012-02-26 00:43:31

标签: c# class reference

我有两个类,一个有很多属性,另一个有几个。我需要在较小的类中引用较大类的一些属性,但我想知道单独传递值是否更好。例如:

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%。

3 个答案:

答案 0 :(得分:2)

在运行时,它们将使用相同数量的空间,因为它们只是引用变量(都指向相同的内存位置)。如果要序列化数据 - 那么通过序列化较大的类,您将看到更多的开销。

答案 1 :(得分:1)

他们将使用几乎相同的内存。通过引用传递会创建一个指向对象的指针,因此除了指针所需的堆空间外,不会使用额外的内存。关于序列化,如果使用标准二进制序列化,选项B可能会占用更少的空间。

答案 2 :(得分:1)

在这种情况下,我不会担心序列化空间(除非你必须序列化数千个实例)。

我会更专注于类型的使用和维护。例如,如果您希望较小的类包含属性的值,就像创建实例时那样,那么我将复制值。否则,我会使用较大类型的引用。这样,较小的类型将获得字段上的所有更改。除非“_var1”和“_var2”永远不会改变,否则我也会用属性替换“_var1 + _var2”。