存取修飾子僅限制類別外部的程式碼,類別內部不存在存取隔離
前面我們已經學習到,在類別內部可以自由存取所有成員
接下來,我們要學習如何在類別外部存取成員。
若要從類別外部存取公開執行個體成員,必須使用「物件變數名稱.成員名稱」的點語法。
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: 存取修飾子