private 成員僅在宣告類別內部可見,衍生類別與外部程式碼均無法存取。編譯器會在嘗試跨越邊界時產生錯誤:
class Per
{
private string _name; // 僅本類別可存取
public string Address;
public int Age { get; set; } // 自動實作屬性
}
Per p = new Per();
// p._name = "Test"; // 編譯錯誤:'Per._name' 因保護層級而無法存取
p.Address = "Taipei"; // 合法
p.Age = 22; // 呼叫 set 存取器

get/set:封裝的標準化入口
class Per
{
private int _age;
public int Age
{
get { return _age; }
set
{
if (value < 0 || value > 150) throw new ArgumentOutOfRangeException();
_age = value;
}
}
}
public int Age { get; set; } // 編譯器自動產生隱私備份欄位
public int Age { get; private set; } // 唯讀對外,內部可寫

abstract class:不可實例化,可包含抽象與非抽象成員abstract method:無主體,衍生類必須以 override 實作
public abstract class Myab
{
public abstract void Hi(string Name); // 無主體,分號結尾
}
public class SubMyab : Myab
{
public override void Hi(string Name)
{
Console.WriteLine($"{Name} override void Hi(string Name)");
}
}
// 使用
SubMyab obj = new SubMyab();
obj.Hi("Test");
| 維度 | 介面 | 抽象類別 |
|---|---|---|
| 成員類型 | 全部隱含 public abstract(C# 8 前) | 可包含任何存取層級、具體實作、欄位、建構函式 |
| 多重實作 | 類別可實作多個介面 | 單一繼承 |
| 版本演進 | C# 8+ 支援預設實作 | 新增非抽象成員不破壞衍生類 |
| 適用場景 | 定義「能做什麼」契約(如 IDisposable) | 定義「是什麼」共享實作骨架 |
public interface IShape
{
double GetArea();
}
// 矩形
public class Rectangle : IShape
{
public double Width, Height;
public Rectangle(double w, double h) { Width = w; Height = h; }
public double GetArea() => Width * Height;
}
// 圓形
public class Circle : IShape
{
public double Radius;
public Circle(double r) { Radius = r; }
public double GetArea() => Math.PI * Radius * Radius;
}
// 三角形(海龍公式簡化版)
public class Triangle : IShape
{
public double A, B, C;
public Triangle(double a, double b, double c) { A = a; B = b; C = c; }
public double GetArea() => A * B * C; // 示意用,實際應用海龍公式
}
// 統一處理
var shapes = new List
{
new Rectangle(2, 8),
new Triangle(5, 1, 9),
new Circle(10)
};
foreach (var s in shapes)
Console.WriteLine($"面積: {s.GetArea():F2}");

private 強制封裝邊界,屬性提供受控存取入口,抽象類別共享實作骨架並強制關鍵行為,介面定義純粹契約支援多重實作。四者結合構成 C# 物件導向設計的四大基石,掌握其適用時機與組合方式,能建構出高內聚、低耦合、易測試、可演進的軟體架構。