如何“通过引用”创建值类型的实例

时间:2013-09-05 04:05:58

标签: c# shallow-copy

考虑代码和输出:

    using Microsoft.Xna.Framework;
    //Where color is from ^ that
    static Color color = new Color(0, 0, 0, 0);
    static void Main(string[] args)
    {
        Color otherColor = color;
        color.B = 100;

        Console.WriteLine(otherColor.B);
        Console.WriteLine(color.B);

        Console.ReadLine();
    }
    //output
    //0   <-- otherColor
    //100 <-- color

但是,我希望otherColor通过引用携带相同的值,这样输出就会变成

//100
//100

如果可能的话,我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:11)

至少不能直接做你想做的事。

Color类型是struct。它是一种价值类型。 Color的每个实例都是值的单独副本。不可能让两个Color实例引用同一个对象,而不是两个int实例可以引用同一个对象。

现在,您可以通过在自己的班级中加入Color来破解某些内容。以下未经过测试:

public class ColorByReference
{
    Color TheColor {get;set;}
}

static ColorByReference color = new ColorByReference {Color = new Color(0,0,0,0)};
static void Main(string[] args)
{
    ColorByReference otherColor = color;
    color.TheColor.B = 100;

    Console.WriteLine(otherColor.TheColor.B);
    Console.WriteLine(color.TheColor.B);

    Console.ReadLine();
}