C# 修飾詞- partial - Ron 2.0
文章推薦指數: 80 %
用法. 部分類別(partial class). 以部分類別為例, 我們可以將一個類別拆成多個部分類別並且分別放 ... C#的partial修飾詞是相對少用的特性,但在某些時候能起到很關鍵的作用,所以還是知道一下比較好.partial不是關鍵字但是他可以放在在class,struct,interface以及voidmethod(…)的前面作為修飾詞,並將類型宣告或方法拆分成多個,而編譯時會將所有區段結合起來,所以對執行時期沒有影響. 用法部分類別(partialclass)以部分類別為例,我們可以將一個類別拆成多個部分類別並且分別放在不同的多個檔案中,如下: OrderService.cs1234publicpartialclassOrderService{//something...} OrderService2.cs1234publicpartialclassOrderService{//something...} 以目前所知patial的用途對於interface,struct都相似於class 部分方法(partialmethod)方法宣告在其中一個部分類別中,並在另外其中一個部分類別中實作已宣告的部分方法. OrderService.cs12345publicpartialclassOrderService{//宣告partialvoidCreateOrder();} OrderService2.cs12345678publicpartialclassOrderService{//實作partialvoidCreateOrder(){//...}} 用途那麼,什麼情境需要特意將相同類別拆分到不同檔案中呢?下面依然以部分類別為出發點說明. 部分方法的情境目前還沒遇過,暫時想不到範例 擴充由工具產生的程式碼工具產生的程式碼原則上是不允許人為去直接修改內容的,因為當下次重新產生的時候,會將修改的部分也覆蓋掉,所以我們會透過partial將工具產生的程式碼與人為擴充的程式碼分開.這方面的應用常見的是在擴充EF(EntifyFramework)自動產生的Models上,EF產生的Models是基於資料庫的欄位的設計的,有時候我們需要加上一些欄位方便使用時就能派上用場,例如: Member.cs(工具產生)123456publicpartialclassMember{publicstringFirstName{get;set;}publicstringLasName{get;set;}} MemberExtend.cs(人為擴充)12345678910publicpartialclassMember{publicstringFullName{get{return$"{FirstName}{LasName}";}}} 上面的例子中,EF在更新Models時只會覆蓋Member.cs,對於擴充部分可以不用擔心被影響. 類別過大且難以分割有些類別本身包含大量的內容,且因為種種因素難以拆分時,就可以利用partial並將其拆分成不同檔案. 如果可以的話還是重構出更小的單元,分成多個部分類型不是優先選項. 重構單一類別時這是運用在之前公司的專案上的,當時因為類別中的程式碼過多且複雜,無法一次重構完,又擔心當下只重構一部分會讓之後要繼續時需要重新花時間再看過一遍,就將重構後的程式碼拆成另一個檔案,等之後全部整理完再合併成一個. 限制由於部分類型編譯後會被視為一個類型,其限制的大原則是不能與這個特性矛盾,這邊大致列出一些. 部分方法 回傳必須為void,且partial一定要放在void前面 不可明確指定存取修飾詞,隱含為private 一個方法最多只能在所有部分類別中宣告一次 最多只能有一個以下的實作 可以宣告後不實作,但不能有實作沒宣告 參數不可有out修飾詞 無法明確實作介面方法 其餘族繁不及備載,更多細節參閱C#規格書或MSDN 其他部分類型所有部分類型的 存取修飾詞不可衝突(但可以只有一個部分類型明確指定修飾詞) 泛型參數的數量、順序與名稱必須完全一致 泛型參數的條件約束不可衝突(可以只有一個部分類型明確指定條件約束) 更多細節參閱C#規格書或MSDN 完整特性關於partial修飾詞的完整特性(非常多…),參閱C#規格書,相關目錄如下(主要在第10章的幾個小節中,其他章就只是簡介然後說參考第10章). 類別10.1.2Partial修飾詞10.2部分類型10.6.8.部分方法 結構11.1.2partial修飾詞 介面13.1.2.partial修飾詞 參考與延伸C#語言規格書MSDNIntroductiontoPartialMethods TableofContents Overview RonSun 59 posts 16 categories 3 tags GitHub Linkedin Resources .NetSourceCode .NetCoreSourceCode NotFalse技術客 放零碎筆記的Gist 1.用法1.1.部分類別(partialclass)1.2.部分方法(partialmethod)2.用途2.1.擴充由工具產生的程式碼2.2.類別過大且難以分割2.3.重構單一類別時3.限制3.1.部分方法3.2.其他部分類型4.完整特性5.參考與延伸
延伸文章資訊
- 1c# partial class 的用法 - 程式人生
partial class A 就是說明這是類A 只是一部分。我可以在建立一個類B.cs。在程式碼裡也寫partial class A。那麼程式在編譯後。兩個A中的屬性和方法會 ...
- 2C# 中Partial的用法_實用技巧 - 程式人生
C# 中Partial的用法 · 1、使用partial 關鍵字表明可在名稱空間內定義該類、結構或介面的其他部分 · 2、所有部分都必須使用partial 關鍵字 · 3、各個部分必須 ...
- 3cs檔分身術:partial class - iT 邦幫忙::一起幫忙解決難題
經學長推薦,筆者研讀lidgren原始碼,才了解C# 有一個特殊的用法partial可以協助Prgrammer採分檔案。 使用方法. 只需要在class前面加上partial 關鍵字即可 ...
- 4C# 中Partial的用法- 小毛崽子 - 博客园
C# 中Partial的用法在学习中又开始接触新的小知识了,记录一下, ... 用partial后拆分为一下public partial class TODO { public string n...
- 5C# 部分类partial class - 首页- 码了么教程malema.net
C# 部分类partial class. 在C# 中,您可以使用partial 关键字在多个.cs 文件中拆分类、结构、方法或接口的实现。 编译程序时,编译器将合并来自多个.cs 文件的所有实现...