public:對所有組件可見。internal:僅對所在組件可見。預設為 public。使用 friend assembly 實現單元測試而不需反射。命令列編譯與 VS2005 Solution 設定示例。
private;介面成員皆 public。| CLR 術語 | C# 術語 |
|---|---|
| Private | private |
| Family | protected |
| Family and Assembly | 不支援 |
| Assembly | internal |
| Family or Assembly | protected internal |
| Public | public |
static 僅用於 class,不可用於 struct(CLR 要求值類型必須實例化且不可控制實例化過程)。System.Object、不可實作介面、僅定義靜態成員、不可作為欄位/方法/參數/區域變數。abstract 和 sealed。CLR 不支援 partial,僅為 C# 語法。故某型別原始碼必須使用同一程式語言。
abstract、virtual/override、sealed、new。call:呼叫靜態/實例/虛方法。必須指定型別或物件;找不到則檢查基底類別。callvirt:呼叫實例/虛方法(不可用於靜態)。必須指定實例物件;為 null 拋 NullReferenceException(每次呼叫額外 null 檢查,較 call 慢)。C# 編譯器:實例方法(含虛方法)用 callvirt,靜態方法用 call。其他編譯器不保證,故虛/非虛方法改動未重編譯會產生不可預測問題。
ToString 覆寫呼叫 base.ToString() 時用 call(避免 callvirt 導致遞迴堆疊溢位)。call(密封無虛方法、永不為 null、避免裝箱效能損失)。sealed 密封類別(易改非密封、難逆向;效能快、安全性高)。new 關鍵字消除。