您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Partial怎么在C#中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
C# 2.0 可以將類、結構或接口的定義拆分到兩個或多個源文件中,在類聲明前添加partial關鍵字即可。
例如:下面的PartialTest類
class PartialTest { string Str_FieldTest; int Int_FieldTest; public void DoTest() { Debug.Print("Test"); } }
可在不同源文件中寫成下面形式:
一個文件中寫:
partial class PartialTest { string Str_FieldTest; int Int_FieldTest; }
另一個文件中寫:
partial class PartialTest { public void DoTest() { Debug.Print("Test"); } }
處理大型項目時,使一個類分布于多個獨立文件中可以讓多位程序員同時對該類進行處理(相當于支持并行處理,很實用);
使用自動生成的源時,無需重新創建源文件便可將代碼添加到類中。Visual Studio 在創建Windows 窗體、Web 窗體時都使用此方法。你不用編輯Visual Studio 所創建的文件,便可創建使用這些類的代碼。換句話說:系統會自動創建一個文件(一般記錄的是窗體及窗體中的控件的屬性),另一個或幾個文件記錄的是用戶自己編寫的代碼。這兩部分分開可以使結構顯得非常清晰,用戶只需關注自己負責的那部分就行了(需要的話,這兩部分可以互相調用)。等到了編輯運行的時候,系統會自動將這兩部分合成一個文件。
使用partial 關鍵字表明可在命名空間內定義該類、結構或接口的其他部分
所有部分都必須使用partial 關鍵字
各個部分必須具有相同的可訪問性,如public、private 等
如果將任意部分聲明為抽象的,則整個類型都被視為抽象的
如果將任意部分聲明為密封的,則整個類型都被視為密封的
如果任意部分聲明繼承基類時,則整個類型都將繼承該類
各個部分可以指定不同的基接口,最終類型將實現所有分部聲明所列出的全部接口
在某一分部定義中聲明的任何類、結構或接口成員可供所有其他部分使用
嵌套類型可以是分部的,即使它們所嵌套于的類型本身并不是分部的也如此。如下所示:
class Container { partial class Nested { void Test1(); } partial class Nested { void Test2(); } }
1、要作為同一類型的各個部分的所有分部類型定義都必須使用partial 進行修飾。如下所示:
public partial class A { } public class A { } // Error, must also be marked partial
2、partial 修飾符只能出現在緊靠關鍵字class、struct 或interface前面的位置(枚舉或其它類型都不能使用partial);
3、要成為同一類型的各個部分的所有分部類型定義都必須在同一程序集和同一模塊(.exe 或.dll 文件)中進行定義。分部定義不能跨越多個模塊;
4、類名和泛型類型參數在所有的分部類型定義中都必須匹配。泛型類型可以是分部的。每個分部聲明都必須以相同的順序使用相同的參數名。
可以使用partial class的場景很多。這里分析一個ORM的例子。系統中有一個Cat類,屬性ID、Age、Weight都需要存儲到數據庫中,一個信息系統中常見的需求。通過讀取數據庫的結構,可以用工具生成Cat類的代碼。并且ORM框架支持了從數據庫信息生成Cat對象。
現在的Cat什么動作都沒有,客戶說,我們需要一個Miaow()的函數。這時就需要對ORM生成的Cat類進行擴展了。可以肯定地一點是,我們不能修改自動生成的代碼,因為這會牽涉到數據庫結構與代碼同步的問題。解決這個需求有兩種方法:繼承方式擴展,partial class擴展。
1、繼承方式擴展
工具自動生成一個CatBase類,這個類只有屬性,嵌入到ORM框架中。既然需要擴展功能,很容易想到對這個基類繼承,于是有了Cat類。Cat類如愿以償地有了Miaow()函數。以前系統中用的是CatBase的實例,現在創建CatBase實例的地方需要改為創建Cat的實例。這個問題讓ORM框架解決吧。客戶的需求實現了,我們自己的代碼生成也沒有遭到破壞,任務完成。
2、partial class擴展
partial class簡單地說就是可以將一個類的代碼寫到兩個或多個代碼文件中。編譯器在編譯的過程中將這幾個文件組合起來一起編譯。一個很酷的技術。工具生成的Cat類仍然不變。既然需要增加函數,那么在新建一個代碼文件,將Miaow()函數寫出來就可以。需要做的僅僅是將類的聲明由class改為partial class,任務完成。
3、對比分析
兩種思路都可以實現需求。孰優孰劣需要仔細分析一下。
實例創建:partial class更加簡潔。
系統復雜度:對于系統來說,partial class方式下只存在一個類,而繼承方式有兩個類。
繼承邏輯:從邏輯上講,Cat并不需要一個基類CatBase,這樣做僅僅是因為在代碼構建過程中的一個限制。
維護性:兩種方式下都會存在兩個代碼文件,維護成本并沒有區別。
可讀性:兩個Cat文件確實讓人費解。
看完上述內容,你們對Partial怎么在C#中使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。