類別宣告完整語法
[attributes] [class-modifiers] class identifier [type-parameter-list]
[: base-class [, interface-list] ]
{
// class-body
}
類別修飾詞詳細說明
| 修飾詞 | 說明 | 限制/備註 |
| new | 巢狀類別隱藏基類別同名成員 | 僅限巢狀類別 |
| public | 無存取限制 | 頂層類別預設 internal |
| internal | 同組件可存取 | 頂層類別預設 |
| private | 僅外層類別可存取 | 巢狀類別專用 |
| protected | 外層類別及衍生類別可存取 | 巢狀類別專用 |
| abstract | 不可實例化,可含抽象成員 | 不可與 sealed 共存 |
| sealed | 禁止繼承 | 不可與 abstract 共存 |
| static | 僅含靜態成員,不可實例化 | C# 2.0+,隱含 sealed + abstract |
| partial | 定義分散多檔案 | 所有部分必須同組件、同存取層級 |
類別實例化
// 基本實例化
var obj = new MyClass();
// 巢狀類別實例化
Outer.Inner nested = new Outer.Inner(); // 若 Inner 為 public
// 或在 Outer 方法中
var nested = new Inner();
// 匿名類別 (僅限區域)
var anon = new { Name = "Test", Value = 123 };
繼承宣告:單一繼承 + 多介面實作
// 單一基類別
class Base { }
class Derived : Base { }
// 介面實作 (可多個)
interface IFly { void Fly(); }
interface ISwim { void Swim(); }
class Duck : IFly, ISwim {
public void Fly() { }
public void Swim() { }
}
// 結合繼承與介面
class FlyingDuck : Duck, IFly { } // 繼承 Duck + 實作 IFly
- C# 不支援多重類別繼承 (避免菱形問題)。
- 所有類別隱含繼承
System.Object。
- 結構體 (
struct) 不支援繼承 (隱含 sealed),但可實作介面。
巢狀類別與存取性
public class Outer {
public class PublicNested { } // 任何人可存取
protected class ProtectedNested { } // Outer + 衍生類別
internal class InternalNested { } // 同組件
private class PrivateNested { } // 僅 Outer
private protected class PrivateProtectedNested { } // 同組件衍生類別 (C# 7.2+)
}
泛型類別宣告
// 型別參數清單
class Repository where TEntity : class, new() {
public TEntity Create() => new TEntity();
}
// 多型別參數
class Dictionary { }
// 巢狀泛型類別
class Outer {
class Inner { } // 獨立型別參數
}
現代 C# 類別新特性
| 特性 | 語法 | 版本 | 關鍵特點 |
| record class | record Person(string Name, int Age); | C# 9 | 不可變、值相等、with 運算式、解構 |
| record struct | record struct Point(int X, int Y); | C# 10 | 值型別 record |
| required 屬性 | class User { public required string Email { get; set; } } | C# 11 | 編譯期強制物件初始化器提供值 |
| 檔案區域類型 | file class Helper { } | C# 11 | 僅限宣告檔案可見,避免命名衝突 |
| 主要建構子 | class Point(int X, int Y) { } | C# 12 | 參數直接成屬性/欄位,簡化建構子 |
常見編譯錯誤
| 錯誤碼 | 原因 | 修正 |
| CS0534 | 未實作抽象基類別/介面成員 | 補全實作或標記衍生類別 abstract |
| CS0509 | sealed 類別不可繼承 | 移除 sealed 或改用組合 |
| CS0655 | partial 類別部分標記不一致 | 所有部分同步修飾詞 |
| CS0118 | 類別名稱與命名空間/型別衝突 | 完整限定名稱或重命名 |