前言:Partial在C#的日常編碼中應用非常廣泛,本文通過三個方面來介紹它,分別是 WHAT(什么是Partial)、WHY(為什么要用Partial)、HOW(怎么用Partial)
- WHAT 什么是Partial
Partial:部分的、局部的、不完全的;
C#中的Partial是C#2.0發布的特性,用來標記一個類是分部類,可以將類、結構、接口或方法的定義拆分為兩個或多個源文件。每個源文件包含類型或方法定義的一個部分,並且在編譯應用程序時將所有部分合並在一起。
- WHY 為什么要用Partial
在日常編碼中,如果遇到一個項目的某一個功能的業務邏輯非常復雜,假設有六十多個屬性、三十多個動作,我們編碼的時候可以把所有的屬性、動作定義在一個類中,但是這個類看上去可能過於冗長;我們也可以把這個功能拆分成若干個小功能去創建類,分別去實現其中的邏輯,調用的時候分別實例化去調用其中的方法,好像也不是很靈活;再比如多個程序員同步進行一個功能模塊下的不同子模塊,提交代碼的時候可能就會沖突,然后需要去合並各自編寫的代碼,也不是很方便。鑒於這,C#2.0就新增了Partial特性。
總結下Partial的優點:
-
- 處理大型項目時,使一個類分布於多個獨立文件中可以讓多位程序員同時對該類進行處理(相當於支持並行處理,很實用)團隊協作時,一個類可以讓其他人修改,但某些部分不希望其他人修改時
- 一個類型中的一部分代碼為自動化工具生成的代碼,不宜與我們自己編寫的代碼混合在一起
- 一個類按照功能需求區分開,比如一部分功能是用於與外部對接的,一部分是具體的實現方法(把public的內容和private內容分開)
- 把一個類中經常維護的內容提取出來,不維護的放到另一塊地方
- 為了美觀性
- 架構設計的時候提升可閱讀性
- HOW 怎么用Partial
Partial的使用比較簡單: 用於標記類、接口、結構或方法的返回類型 eg : public partial class 類名;
-
- 示例一:修飾類
using System; using System.Collections.Generic; using System.Text; namespace Tools.Learn.Partial { /// <summary> /// 定義一個局部類 /// </summary> public partial class LearnPartial { } }
不同文件中定義分部類:截圖如下
分部類中定義各自的方法:
然后調用:
可以看到調用的時候寫在不同文件中的同一個分部類的方法都可以調到
-
- 示例二:修 飾接口
using System; using System.Collections.Generic; using System.Text; namespace Tools.Learn.Partial { /// <summary> /// 定義一個分部接口 /// </summary> public partial interface ILearnPartialcs { } }
- 使用Partial注意事項:
-
- "partial"修飾符后面只能緊跟“class”、“record”、“interface”、“struct” 或方法返回類型
- 關鍵字“partial ”是一個上下文關鍵字,只有和 class、struct、interface 放在一起時才有關鍵字的含義,因此 partial 的引入不會影響現有代碼中名稱為partial的變量。
- 局部類型的各個部分一般是分開放在幾個不同的 *.cs 文件中,但 C# 編譯器允許我們將他們放在同一文件中
- 所有部分都必須使用partial 關鍵字
- 各個部分必須具有相同的可訪問性,如public、private 等
- 如果一個類型有一個部分使用了abstract修飾符,那么整個類都將被視為抽象類;
- 如果一個類型有一個部分使用了 sealed 修飾符,那么整個類都將被視為密封類;
- 一個類的各個部分不能使用相互矛盾的修飾符,比如不能在一個部分上使用abstract,又在另一個部分上使用sealed。
- 一個類型的各個部分上指定的基類必須一致,某個部分可以不指定基類,但如果指定,則必須相同。
- 局部類型上的接口具有“累加”效應如:
partial class Class1: Iinterface1, Iinterface2 {} partial class Class1: Iinterface3 {} partial class Class1: Iinterface2 {}
相當於:
class Class1: Iinterface1, Iinterface2, Iinterface3 {}
- Partial和繼承 Partial其實就是把一個類中的屬性方法定義在不同的文件中,編譯的時候會合成一個類,實質就是一個類,>=1個代碼文件
-
繼承也可以將兩個類的屬性和方法編譯到一個類中,實質就是兩個類,兩個代碼文件;
-
Partial的應用更加靈活簡潔,各個分部文件中可以相互調用,水平關系;繼承的話就有一個子類父類的垂直關系
參考博客:https://www.cnblogs.com/qtiger/p/11177036.html
官網地址:部分類和方法 - C# 編程指南|微軟文檔 (microsoft.com)