如何通过引用创建一个值类型的实例

4

考虑以下代码和输出:

    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个回答

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

2
即使对于 Color? - kbtz
有什么解决方法吗?我在使用XNA时被限制了颜色的部分,所以我将无法创建一个新类,至少我认为我不能这样做。 - Colton
@Colton 他刚刚编辑了他的回答,并提供了一个解决方法。 :) - doppelgreener
太棒了,我觉得我可以用它工作。非常感谢你。(是的,我测试过了,它可以工作。) - Colton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接