attributes? modifiers? partial? class identifier type-params? : base? constraints? body
attributes? modifiers? partial? struct identifier type-params? : interfaces? constraints? body
attributes? modifiers? partial? interface identifier type-params? : base? constraints? body
partial 非關鍵字,僅在緊鄰型別關鍵字時有特殊意義partial,同命名空間、同組件編譯partial,通常外層也為 partial[Attr1, Attr2("hello")] partial class A { }
[Attr3, Attr2("goodbye")] partial class A { }
// 等價於
[Attr1, Attr2("hello"), Attr3, Attr2("goodbye")] class A { }
型別參數屬性同理合併。
public/internal 等)必須一致,否則編譯錯誤new(巢狀型別隱藏):任一部分有即生效abstract:任一部分有即為抽象類別(不可同時 sealed)unsafe:僅標記部分視為 unsafe 內容where)集合必須一致(類別、介面、new())where K: IComparable; where V: IPersistable ≡ where V: IPersistable; where K: IComparableSystem.Objectprivate 成員跨部分可存取partial 方法)各部分可有不同 using,簡單名稱解析僅參考該部分的 using:
namespace N {
using List = System.Collections.ArrayList;
partial class A { List x; } // x: ArrayList
}
namespace N {
using List = Widgets.LinkedList;
partial class A { List y; } // y: LinkedList
}
同一識別項在不同部分可解析為不同型別。
// 宣告部分(通常工具生成)
partial void OnCreated();
// 實作部分(通常手寫)
partial void OnCreated() { Console.WriteLine("Created!"); }
void,不可 out 參數private,不可為 virtual/abstract/override