如何设置属性的成员?

时间:2012-08-03 02:29:36

标签: c# xna

我有像这样的矢量的属性

    public Vector2 TestVector
    {
        get { return testvector; }

        set
        {
            testvector = value;

        }
    }

Vector2有成员X和Y。

当我想将property.x和property.y设置为值时,它不起作用

// this does not work
TestVector.X = 10;

我该如何解决这个问题?

编辑:我看到我得到了答案,说它是一个结构,但实际上我有一个名为dVector2的组合类,它是类型而不是结构,我使用它。为了简单起见,我只把vector2放在这里,但这种情况适得其反。

3 个答案:

答案 0 :(得分:5)

Vector2是一个struct(value-type)。所以这是您尝试TestVector.X = 10时发生的事情:

{
    Vector2 temp = get_TestVector();   // copy is made during return from
                                       // hidden call to property getter method

    temp.X = 10;                       // modifying the copy

                                       // copy is gone
}

最终结果是没有任何反应

不幸的解决方案是:

TestVector = new Vector2 { X = 10, Y = TestVector.Y };

另一种可能适用于您的情况的解决方案是简单地将TestVector设为公共字段,而不是属性:

public Vector2 TestVector;

答案 1 :(得分:1)

没有人提到的另一个解决方案就是为你拥有的每个向量的X和Y创建一个存取方法。

Public float TestVectorX
{
    get { return TestVector.X; }
    set { TestVector.X = value; }
}

Public float TestVectorY
{
    get { return TestVector.Y; }
    set { TestVector.Y = value; }
}

添加更多代码,但没有额外的内存,每次都声明一个新的向量,或者没有完全公开的丢失封装。

答案 2 :(得分:0)

@Jonathon打败了我,指出你有一个结构。

我想补充说,一般来说,使用可变结构是不明智的。由于价值语义,这会导致各种复杂情况。

一旦 struct 获得它的初始值,它们就应该是不可更改的(即没有公共设置者等)。

  

如果使用C#结构,它应该是不可变的。可变结构导致各种令人讨厌的问题;不要这样做。如果我不得不设计C#语言,我会说可变结构必须用'mutable'关键字标记。

http://blogs.msdn.com/b/jaybaz_ms/archive/2004/06/10/152748.aspx