2017-01-23 92 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個變量執行此操作,則我的班級將盡可能少(如果我想在get/set中添加一個測試,則該班級最多)100行,僅用於我的變量... 您是否知道其他方法繼續?或者我可以如何壓縮這種方法? 謝謝!如果您需要更新很多其他類的變量考慮重新設計你的代碼

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

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

而且在現實生活中:

+0

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

回答

0

這種類型的變量被稱爲屬性,它用於我希望變量可以被其他對象讀取和編輯的情況,所以它是解決您的問題的最佳方案,即使您將增加屬性數量或添加檢查在get/set中。 繼續!

4

您可以使用auto-implemented properties。可能你已經將數據和邏輯分成兩個不同的類。考慮將兩個類組合成一個具有處理該數據的數據和邏輯。

注意:有大的更新到正在添加的C#下一個版本叫做Record Types,讓您只列出類名後所有的類屬性:

class Character(int X, int Y); 

這是一個好語法糖數據傳輸對象。

+0

記錄不是在C#7的到來,有可能我記得在他們的github上閱讀它,但它也記錄在記錄部分頂部的鏈接中。 – 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); 
    } 
}