您好,登錄后才能下訂單哦!
這篇“C#中的partial關鍵字怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C#中的partial關鍵字怎么使用”文章吧。
partial
關鍵字用于拆分一個類、一個結構、一個接口或一個方法的定義到兩個或更多的文件中。 每個源文件包含類型或方法定義的一部分,編譯應用程序時將把所有部分組合起來。在設計 Framework 時,可以充分利用 partial
這個特性。
什么情況下需要拆分類定義呢?
處理大型項目時,使一個類分布于多個獨立文件中可以讓多位程序員同時對該類進行處理。
當使用自動生成的源文件時,你可以添加代碼而不需要重新創建源文件。 Visual Studio 在創建 Windows 窗體、Web 服務包裝器代碼等時會使用這種方法。 你可以創建使用這些類的代碼,這樣就不需要修改由 Visual Studio 生成的文件。
使用源生成器在類中生成附加功能時。
例子
將 Coords 類 分部在 2 個文件中定義。
CoordsOne.cs
定義了 Coords 類的構造函數
注意簽名 partial class Coords
namespace ConsoleApp1.PartialClass { public partial class Coords { private int x; private int y; public Coords(int x, int y) { this.x = x; this.y = y; } } }
CoordsTwo.cs
定義了 Coords 類的一個方法
注意簽名 partial class Coords
namespace ConsoleApp1.PartialClass { public partial class Coords { public void PrintCoords() { Console.WriteLine("Coords: {0},{1}", x, y); } } }
TestPartial.cs
測試一下上面的分部類
using ConsoleApp1.PartialClass; namespace ConsoleApp1 { internal class TestPartial { static void Main(string[] args) { Coords coords = new Coords(10, 20); coords.PrintCoords(); } } }
結果:
Coords: 10,20
處理分部類定義時需遵循下面的幾個規則:
要作為同一類型的各個部分的所有分部類型定義都必須使用 partial
進行修飾。
例如,下面的類聲明會生成錯誤:
public partial class A { } //public class A { } // Error, must also be marked partial
partial
修飾符只能出現在緊靠關鍵字 class
、struct
或 interface
前面的位置。
分部類型定義中允許使用嵌套的分部類型,如下面的示例中所示:
partial class ClassWithNestedClass { partial class NestedClass { } } partial class ClassWithNestedClass { partial class NestedClass { } }
要成為同一類型的各個部分的所有分部類型定義都必須在同一程序集和同一模塊(.exe 或 .dll 文件)中進行定義。 分部定義不能跨越多個模塊。經測試這些分部的文件必須在同一命名空間
。
還是上面的例子,CoordsThree.cs 也定義成 partial
類,但是相比 CoordsOne.cs 和 CoordsTwo.cs 不是在同一個命名空間,會出錯。
類名和泛型類型參數在所有的分部類型定義中都必須匹配。 泛型類型可以是分部的。 每個分部聲明都必須以相同的順序使用相同的參數名。
如果某關鍵字出現在一個分部類型定義中,則該關鍵字不能與在同一類型的其他分部定義中指定的關鍵字沖突:public,private,protected,internal,abstract,sealed 等
將 CoordsOne.cs 中 public 改成 internal,產生訪問屬性沖突。
同理,也可以開發分部結構和接口
partial interface ITest { void Interface_Test(); } partial interface ITest { void Interface_Test2(); } partial struct S1 { void Struct_Test() { } } partial struct S1 { void Struct_Test2() { } }
分部方法在分部類型的一部分中定義了簽名,并在該類型的另一部分中定義了實現。 通過分部方法,類設計器可提供與事件處理程序類似的方法掛鉤,以便開發者決定是否實現。 如果開發者不提供實現,則編譯器在編譯時刪除簽名。 以下條件適用于分部方法:
聲明必須以上下文關鍵字 partial
開頭。
分部類型各部分中的簽名必須匹配。
構造函數、終結器、重載運算符、屬性聲明或事件聲明中不允許使用 partial
關鍵字。
例如:
namespace PM { partial class A { partial void OnSomethingHappened(string s); } // This part can be in a separate file. partial class A { // Comment out this method and the program // will still compile. partial void OnSomethingHappened(String s) { Console.WriteLine("Something happened: {0}", s); } } }
在以下情況下,不需要使用分部方法即可實現:
沒有任何可訪問性修飾符(包括默認的 專用)。
返回 void。
沒有任何輸出參數。
沒有以下任何修飾符:virtual、override、sealed、new 或 extern。
C# - this 的用法 一文中有介紹 this 具有擴展類方法的功能,那么 this
和 partial
有區別是?
概念的區別,this
是對原有功能進行擴展,partial
是將整體分成多個部分存放,便于維護。
實現方式的區別
patial
分部的簽名要求一致,必須是 partial
class/interface/struct Name,文件名不一樣。
this 擴展類名不一樣,但必須是靜態的類,靜態的方法,方法第一個參數必須是 this
ClassName
調用的區別
partial
分部的各個文件必須在同一 namespace 命名空間this
擴展可以在不同命名空間,但是需要導入擴展的 namespace 命名空間后才能調用擴展的方法。
以上就是關于“C#中的partial關鍵字怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。