2016-10-31 11 views
0

私のクラスには2つのポイントリストがあります。 1つは最初にロードされた値、2つ目は変更された値です。私はクラス内で2つの別々のリストを作成していますが、change_pointsメソッドで変更しようとしているときにstart_pntsリストも値を変更します。私は何が間違っているのか分かりません。私はこの単純な問題の助けを借りて感謝します。あなたは一つのオブジェクトを変更した場合、それは、同一の参照を保持しているため、あなたが実際にあまりにも他を変更しているので、独立したリストを作る

class Polygon : Shape 
    { 
     private List<Point> points = new List<Point>(); 
     private List<Point> start_pnts = new List<Point>(); 

     public override void add_point(Point pnt) 
     { 
      start_pnts.Add(pnt); 
      points.Add(pnt);   
     } 

     public override void change_points(double x, double y) 
     { 
      for (int i = 0; i < points.Count; i++) 
      { 
       points[i].x = start_pnts[i].x + x; 
       points[i].y = start_pnts[i].y + y; 
      } 
     } 
} 

答えて

2

実際には同じ参照が保存されているので、変更が2つのリストに反映されることは明らかです。クラスの代わりにPoint構造体を使用することをお勧めします。したがって、参照の代わりにコピー値を使用するか、またはICloneableインターフェイスを実装してそこにロジックを実装するよう提案されています。

+0

あなたは100%正しいです、私はリストに焦点を当て、私がそれに追加しているものではありません...あなたの答えをありがとう。 – KamCho

+0

あなたは歓迎仲間:) –

2

あなたは今、同じ参照を保存しています。

あなたがしなければならないことは、元のオブジェクトのコピーを作ることです。通常、そのためにICloneableインターフェイスを実装するか、オブジェクトをコピーする独自のカスタムメソッドを作成できます。もう1つの選択肢は、クラスを構造体にすることです。このクラスは本質的に値によってコピーを作成します。

関連する問題