類別外部存取成員

存取修飾子僅限制類別外部的程式碼,類別內部不存在存取隔離

前面我們已經學習到,在類別內部可以自由存取所有成員

接下來,我們要學習如何在類別外部存取成員。

若要從類別外部存取公開執行個體成員,必須使用「物件變數名稱.成員名稱」的點語法。

class Program
{
    static void Main(string[] args)
    {
        Worker worker = new Worker(); //建立物件
        int hours = worker.GetHours(); //透過物件名稱存取public函式
        worker.hours = 12; //透過物件名稱指派值給public變數
        Console.WriteLine(worker.hours); //像一般變數一樣直接讀取
    }
}

class Worker
{
    int age;
    private double savings;
    public int hours;

    void ReadSavings()
    {
        Console.WriteLine(savings);
    }

    public int GetHours()
    {
        return hours;
    }
}Code language: C# (cs)

Worker 的方法 GetHours 標記為 public,因此外部能夠讀寫;

Program 類別的 Main 方法建立 Worker 物件 worker

透過物件名稱 worker 存取成員。物件名稱概念類似指標,存放著參考位址,搭配點號 . 就能存取公開成員。

外部存取執行個體成員格式:物件變數.公開欄位/公開方法()

private 成員無法在類別外部使用點語法存取

如果在類別外部嘗試存取私有成員(欄位、函式),程式會直接報錯。

錯誤範例

class Program
{
    static void Main(string[] args)
    {
        Worker worker = new Worker(); 
        int hours = worker.GetHours(); 
        worker.hours = 12;
        Console.WriteLine(worker.hours);

        worker.ReadSavings();
        worker.age = 20;
        worker.savings = 1000000000.0;
    }
}

class Worker
{
    int age;
    private double savings;
    public int hours;

    void ReadSavings()
    {
        Console.WriteLine(savings);
    }

    public int GetHours()
    {
        return hours;
    }
}Code language: C# (cs)

再看另一個範例

class Rectangle
{
    // 公開執行個體欄位:長 Length、寬 Width
    public int Length, Width;

    // 執行個體方法:計算並回傳矩形面積
    public int GetArea()
    {
        return Length * Width;
    }
}

class Program
{
    static void Main()
    {
        // 建立兩個獨立的矩形執行個體
        Rectangle rect1 = new Rectangle();
        Rectangle rect2 = new Rectangle();

        // 分別設定兩個矩形的長寬,資料互相隔離
        rect1.Length = 10; rect1.Width = 5;
        rect2.Length = 8;  rect2.Width = 7;

        // 讀取長寬、呼叫方法輸出面積
        Console.WriteLine("矩形1:長{0},寬{1},面積{2}", rect1.Length, rect1.Width, rect1.GetArea());
        Console.WriteLine("矩形2:長{0},寬{1},面積{2}", rect2.Length, rect2.Width, rect2.GetArea());
    }
}Code language: C# (cs)

這是矩形類別,內有兩個公開欄位 Length 與 Width,分別存放矩形的長與寬,另外還有 GetArea 函式回傳矩形面積。

這些成員全部都是公開的。

執行結果

矩形1:長10,寬5,面積50
矩形2:長8,寬7,面積56

在記憶體中的存放形式如下

兩個物件各自獨立儲存,分別擁有專屬的 Length 與 Width,彼此互不影響。

類別外部存取成員

Previous:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *