0

私はこのようなベクトルのプロパティを持っています

    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を置くだけですが、それは裏目に出ました。

4

3 に答える 3

5

Vector2構造体(値型)です。だからここにあなたがしようとしたときに何が起こっているのですか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;
于 2012-08-03T02:34:32.850 に答える
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; }
}

もう少しコードを追加しますが、毎回新しいベクトルを宣言するための余分なメモリや、カプセル化が完全に公開されて失われることはありません。

于 2012-08-03T02:47:18.997 に答える
0

@Jonathonは、あなたが構造体を持っていることを指摘するために私を殴りました。

一般的に言って、可変構造体を持つことは賢明ではないことを付け加えておきます。これは、値のセマンティクスによるあらゆる種類の複雑化につながります。

構造体が初期値を取得すると、それらは変更できないはずです(つまり、パブリックセッターなどはありません)。

C#構造体を使用する場合は、不変である必要があります。可変構造体は、あらゆる種類の厄介な問題を引き起こします。それをしないでください。C#言語を設計し直す必要がある場合、可変構造体は「mutable」キーワードでマークする必要があると思います。

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

于 2012-08-03T02:38:06.090 に答える