2

自動生成されたプロパティについて話すときのほとんどの例は、文字列などの「単純な」値型について話します。しかし、ILで自動的に生成されるこのような値型のフィールドにアクセスして、「自動プロパティ」をバックアップしたい場合はどうでしょうか。

コンパイラはこれを許可しません:「変数ではないため、'Position'の戻り値を変更できません」。この戻り値を変更できない理由は理解できますが、これらのフィールドにアクセスするにはどうすればよいでしょうか。

私たちが持っていると言う

class A
{
    Vector2 Position { get; set; }

    public void Foo()
    {
        Position.X = 10.0f;    // Not allowed!
    }
}

クラスA内のVector2インスタンスのフィールドXにアクセスして設定するにはどうすればよいですか?

4

2 に答える 2

5

プロパティから自動的に生成される参照型へのアクセス

あなたの問題は、それが参照型でVector2ないということです。値型です。プロパティにアクセスするPositionとコピーが返されるため、一時的なものを変更しようとしています。この状況では、完全に新しい値を設定する必要があります。

Position = new Vector2(10.0, Position.Y);

この場合、プライベートフィールドを作成し、自動プロパティを使用しないこともできます。

class A
{
    Vector2 _position;
    Vector2 Position 
    { 
        get { return _position; } 
        set { _position = value; }
    }

    public void Foo()
    {
        _position.X = 10.0f;  
    }
}

ドキュメント: http: //msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.aspx

于 2012-08-19T18:02:38.953 に答える
2

Vector2 は実際には値型であり、参照型ではありません。新しい Vector2 を作成する必要があります。

Postion = new Vector2(10.0f, Position.Y);
于 2012-08-19T18:03:42.500 に答える