簡體   English   中英

C#與另一個類中的一個類的變量進行交互

[英]C# Interact with variable of a class in an other class

我正在學習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中添加測試),這將做100行...您知道其他方法可以繼續嗎? 或如何壓縮此方法? 謝謝!

您可以使用自動實現的屬性

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

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

同樣在現實生活中,如果您需要更新許多其他類的變量,請考慮重新設計代碼。 可能您已將數據和邏輯分為兩個不同的類。 考慮將兩個類別與數據和處理該數據的邏輯合並為一個類別。

注意:C#的下一版本有一個重大更新,稱為記錄類型 ,它將允許您僅在類名稱后列出所有類屬性:

class Character(int X, int Y);

對於數據傳輸對象來說,這是很好的語法糖。

這種變量稱為屬性,當我希望該變量可從其他對象讀取和編輯時使用,因此即使您增加屬性的數量或在get / set中添加檢查,它也是解決問題的最佳解決方案。 繼續!

除了自動屬性,您還可以使用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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM