質問

と言う私は、クラス内のプロパティを持っています:

Vector3 position{get; set;}

私は、そのクラスのどこかのインスタンスを作成して、今私は、変更position.xにしたいので、ゲッターとセッターセットとは、オブジェクト全体を取得しているため、それが今では不可能であろう。だから私は、一時のVector3は、その値を変更し、それを割り当てるようにする必要があります。

問題が解決されるだろうように、

通常、iは位置公共分野になるだろう。しかし、位置がインタフェースを実装したものですので、私はこのケースではそれを行うカントとのインタフェースは、フィールドを持っているカントます。

それでは、どのように私はこれに最善の方法を解決することができます。

は編集:のVector3が構造体であるので、そのA値型

役に立ちましたか?

解決

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.Yobj.Zobj.Positionを変更することができます。

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

Vector3 IWhateverInterface.position {
    get {return position;}
    set {position = value;}
}

他のヒント

許容何とか簡単な解決策はありませんか?

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

何で間違っていますか?それは完全に簡単そうです。

変更可能な値型の問題の一つです。新しいX値を持つ値型の新しいインスタンスを作成して、プロパティに割り当て直すことができます。あなたは便利なコンストラクタを提供するか、(代わりに値を変更する)変更されたオブジェクトを返すメソッドを追加することによって、より簡単に、インスタンスの作成を行うことができます。

をプリP.S の:。のソー手遅れVector3が値型であること。以下の記事は、したがって、多くの助けになることはありません。申し訳ありませんがその間違いについて。

さて、インタフェースがフィールドを持つことができない一方で、彼ら のできる性質を持って、例えば:ます。

interface IVector3
{
    double X { get; set; }
    double Y { get; set; }
    double Z { get; set; }
}

あなたのVector3では、あなたは、単に他のもののようにすべてを実装します

class Vector3 : IVector3
{
    double IVector3.X
    {
        get { ... }
        set { ... } 
    }
    ...
}

今すぐ戻ってあなたpositionプロパティに。あなたは、初期化時に固定のインスタンスにプロパティを結ぶ唯一のゲッターを提供します:

Vector3 position
{
    get
    {
        return _position;
    }
}

private Vector3 _position = new Vector3(...);
プロパティにすることにより、

は読み取り専用(すなわち。ノーセッター)、あなたはそれが新しいVector3オブジェクトに置き換えられないことを確認してください。代わりに、初期化時に固定インスタンス(_position)にそれを結びます。しかし、あなたはVector3position.X、またはposition.Yに新しい値を割り当てることによってposition.Zを変更することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top