2017-01-23 6 views
0

私はC#を学び、このクラスからクラスの変数とやりとりするための最良の方法を尋ねました。私はこれについて考えました:C#他のクラスのクラスの変数との相互作用

public class Character 
    { 
     private int x, y; 

     public Character(int posX, int posY) 
     { 
      x = posX; 
      y = posY; 
     } 

     public int X 
     { 
      get 
      { 
       return x; 
      } 
      set 
      { 
       x = value; 
      } 
     } 

     public int Y 
     { 
      get 
      { 
       return y; 
      } 
      set 
      { 
       y = value; 
      } 
     } 
    }` 

    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Character hero = new Character (42, 36); 
      Console.WriteLine (hero.X); 
      Console.WriteLine (hero.Y); 
      hero.X = 5; 
      Console.WriteLine (hero.X); 
     } 
    } 

このメソッドが良いか最適化されているかどうかはわかりませんが、うまくいきます。しかし、もし私が10の変数に対してこれをしたいのであれば、私のクラスは私の変数のためだけに100行を最小限に抑えます(get/setでテストを追加したい場合はもっと多くなります)... 他の方法を知っていますか?どのように私はこの方法を圧縮することができますか? ありがとうございました!

+0

類似:http://softwareengineering.stackexchange.com/questions/133015/private-variable-vs-property –

答えて

0

この種類の変数はプロパティと呼ばれ、変数を他のオブジェクトから読み込み編集できるようにするために使用されるため、プロパティの数を増やしたりチェックを追加したり取得/設定します。 続き!

4

あなたはauto-implemented propertiesを使用することができます。また

public class Character 
{ 
    public Character(int x, int y) 
    { 
     X = x; 
     Y = y; 
    } 

    public int X { get; set; } 
    public int Y { get; set; } 
} 

を実際の生活の中であなたが他のクラスの多くの変数を更新する必要があなたのコードを再設計することを検討している場合。おそらく、データとロジックを2つの異なるクラスに分けています。 2つのクラスを1つのデータに結合し、そのデータを処理するロジックを考えてみましょう。

注:データ転送オブジェクトのための良好な構文糖がある

class Character(int X, int Y); 

を:あなただけのクラス名の後に、すべてのクラスのプロパティを一覧表示できるようになりますRecord Typesと呼ばれるのC#の次のバージョンに来て大きな更新があります。

+0

レコードはおそらく、C#7には来ていない変更を確認するには、以下のコードをチェックしてください私は自分のギブスでそれを読むことを思い出しますが、あなたはレコードセクションの上部に投稿するリンクにも記載されています。 – pinkfloydx33

0

自動プロパティに加えて、Object initializerを使用できます。その場合、明示的にコンストラクタを宣言する必要はありません。この機能を使用すると、コードの行をさらに少なくすることができます。

public class Character 
{  
    public int X { get; set; } 
    public int Y { get; set; } 
} 


class MainClass 
{ 
    public static void Main (string[] args) 
    { 
     var hero = new Character {X = 42, Y = 36}; 
     Console.WriteLine(hero.X); 
     Console.WriteLine(hero.Y); 
     hero.X = 5; 
     Console.WriteLine (hero.X); 
    } 
} 
関連する問題