1

foo私は20人のメンバーを含むクラス(それを呼びましょう)を持っています。クラスにはメソッドがあり public foo Rotate(double angle)ます。

このメソッドは、呼び出し元のオブジェクトを特定の角度で回転させ、新しいfooオブジェクトを作成します。新しいオブジェクトの10個のメンバーは、常に呼び出し元のオブジェクトと同じです。

Rotateメソッドが呼び出されるたびに20のメンバーすべてを再計算する必要がないように、このクラスを実装するための最良の方法は何ですか?

4

2 に答える 2

0

クラスのプロパティをクラスの外部で変更できると仮定すると、最善の解決策はコピーコンストラクターだと思います。

これが本質的に意味するのは、同じクラスのオブジェクトをパラメーターとして受け取るクラス内のコンストラクターを定義してから、オブジェクトのすべてのプロパティを新しいオブジェクトにコピーすることです。

値を割り当てるだけなので、効率に問題はありません(値がプリミティブであると仮定します)。

次に、新しいオブジェクトを初期化したら、10個の異なるプロパティを回転した対応するプロパティに設定します。

于 2012-07-17T22:45:22.687 に答える
0

MemberwiseCloneすべてのフィールドの浅いコピーを実行するために使用できます。

public class Foo
{
   public Foo Rotate(int angle)
   {
       var newInstance = (Foo)this.MemberwiseClone();
       // do other stuff...
       return newInstance; 
   }
}

20個のフィールドが値型の場合は、設定する必要があります。そうでない場合は、コピーコンストラクターを使用する方がおそらく安全です。

于 2012-07-17T22:49:20.100 に答える