2

最初に、いくつかのコードを使用して問題を説明します。

class ExampleClass
{
    private Vector2 _myVector;

    public Vector2 MyVectorProperty { get { return _myVector; } set { _myVector = value; } }

    private void MyMethod()
    {
        _myVector = Vector2.Zero; // Setting to zero

        MyVectorProperty.X = 5; //Cannot modify the expression because it is not a variable (returns an error)

        _myVector.X = 5; //Works fine!
    }
}

ご覧のとおり、プロパティを使用してベクトルの X と Y の値を変更しようとすると、「変数ではないため式を変更できません」というエラーが表示されます。なぜこれが起こるのかよくわかりませんし、ネットを見てもうまくいきませんでした。

別の副次的な質問です。パブリック プロパティまたはプライベート/保護されたフィールドを、それらが属するクラス内で作業するときに使用することは、適切なプログラミング方法ですか?

4

2 に答える 2

4

コンパイラがそうさせてくれないことを喜ぶべきです。そうしないと、操作の結果が失われて本当に驚くでしょう。

  • MyVectorPropertyis プロパティ - つまり、値を取得することは、値を返す関数 (のようなものthis.get_MyVectorProperty()) を呼び出すことです。
  • の型MyVectorPropertyは struct である Vector2 であるため、get_...関数によって返される値は値のコピーであり、通常のクラスの場合のような参照ではありません。
  • 上記のコピーのフィールドXを変更すると、値のコピー内の X が変更されるだけであり、その値のコピーは何にも割り当てられていないため、失われます。
于 2012-06-20T23:45:48.637 に答える
1

Vector2は構造体(値型)であるため、プロパティはの値_myVector(つまりコピー)を返し、それを変更することはできません。

于 2012-06-20T23:34:31.270 に答える