3

クラスにプロパティがあるとしましょう:

Vector3 position{get; set;}

そのため、そのクラスのインスタンスをどこかに作成し、position.xを変更したいのですが、getterとsetterがオブジェクト全体を設定して取得するため、これは不可能です。したがって、一時的なVector3に値を変更させてから、割り当てる必要があります。

通常、私は問題が解決されるようにポジションをパブリックフィールドにします。しかし、この場合、位置はインターフェースの実装であり、インターフェースはフィールドを持つことができないため、それを行うことはできません。

では、どうすればこれを最善の方法で解決できますか。

編集:Vector3は構造体であるため、値型

4

3 に答える 3

9

単純な解決策は受け入れられないのでしょうか?

foo.position = new Vector(newX, foo.position.Y, foo.position.Z);

それの何がいけないの?それは完全に簡単に思えます。

于 2010-01-17T23:24:15.663 に答える
6

IMO、ここで最も簡単な答え:

private Vector3 position;
public Vector3 Position {
    get {return position;}
    set {position = value;} // with @Mehrdad's optimisation
}
public float X {
    get {return position.X;}
    set {position.X = value;}
}
public float Y {
    get {return position.Y;}
    set {position.Y = value;}
}
public float Z {
    get {return position.Z;}
    set {position.Z = value;}
}

obj.Xこれで、obj.Yを変更できますobj.Z。1つのディメンションのみを変更する必要がある場合、またはobj.Positionすべてを変更するために変更する必要がある場合。

positionインターフェイスを実装するために名前が必要な場合は、明示的に行います。

Vector3 IWhateverInterface.position {
    get {return position;}
    set {position = value;}
}
于 2010-01-17T22:37:54.493 に答える
2

これは、可変値型の問題の1つです。新しい値を使用して値タイプの新しいインスタンスを作成Xし、プロパティに再割り当てできます。便利なコンストラクターを提供するか、(値を変更する代わりに)変更されたオブジェクトを返すメソッドを追加することで、インスタンスの作成を容易にすることができます。

于 2010-01-17T22:24:27.410 に答える