首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# partial 部分類型深度解析(二)

     編輯:關於C語言

前言

承接上篇文章,本文將深入探討 partial 部分類型的限制條件、注意事項、屬性累加效應、修飾符一致性規則,以及基類與介面的繼承機制。

一、部分類型的四大限制

限制說明
1. 適用型別僅支援 class、struct、interface,不支援 delegate 與 enum
2. partial 修飾符同一型別的所有部分必須都標記 partial
3. 命名空間所有部分必須位於相同命名空間中
4. 同時編譯所有部分必須在同一次編譯單元中編譯

二、重要注意事項

  1. contextual keyword:partial 是情境關鍵字,僅在緊接 class/struct/interface 時具有關鍵字語意,不影響現有名為 partial 的變數名稱
  2. 檔案組織:各部分通常分置於不同 .cs 檔案,但編譯器允許置於同一檔案(方便教學展示)

三、屬性的累加效應

定義於各部分類型上的屬性會自動合併:

[Attribute1, Attribute2("Hello")]
partial class Class1 { }

[Attribute3, Attribute2("Exit")]
partial class Class1 { }

// 等同於
[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 { }

註:Attribute2 需標記 [AttributeUsage(AllowMultiple = true)] 才允許重複套用。

四、修飾符一致性規則

規則說明
存取修飾符所有部分的存取修飾符 (public/internal 等) 必須一致
abstract任一部分標記 abstract,整個類別視為抽象類別
sealed任一部分標記 sealed,整個類別視為密封類別
衝突禁止不可同時使用 abstract 與 sealed (互斥)

五、基類與介面繼承機制

1. 基類一致性

  • 所有部分指定的基類必須相同
  • 部分類別可省略基類宣告,但若指定則必須一致

2. 介面的累加效應

partial class Class2 : IInterface1, IInterface2 { }
partial class Class2 : IInterface3 { }
partial class Class2 : IInterface2 { }

// 等同於
class Class2 : IInterface1, IInterface2, IInterface3 { }

介面清單會自動合併去重,順序不影響語意。

六、實務應用建議

  • 大型類別拆分:將龐大類別依功能拆分為 ClassName.Core.cs、ClassName.Serialization.cs、ClassName.UI.cs 等
  • 程式碼產生器整合:設計工具產生的程式碼 (如 FormName.Designer.cs) 與手寫邏輯分離,避免衝突
  • 團隊協作:不同開發者可同時修改同一類別的不同部分,減少合併衝突
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved