<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
partial
關鍵字用於拆分一個類、一個結構、一個介面或一個方法的定義到兩個或更多的檔案中。 每個原始檔包含型別或方法定義的一部分,編譯應用程式時將把所有部分組合起來。在設計 Framework 時,可以充分利用 partial
這個特性。
什麼情況下需要拆分類定義呢?
例子
將 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 不是在同一個名稱空間,會出錯。
將 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); } } }
在以下情況下,不需要使用分部方法即可實現:
C# - this 的用法 一文中有介紹 this 具有擴充套件類方法的功能,那麼 this
和 partial
有區別是?
this
是對原有功能進行擴充套件,partial
是將整體分成多個部分存放,便於維護。patial
分部的簽名要求一致,必須是 partial
class/interface/struct Name,檔名不一樣。
this 擴充套件類名不一樣,但必須是靜態的類,靜態的方法,方法第一個引數必須是 this
ClassName
partial
分部的各個檔案必須在同一 namespace 名稱空間this
擴充套件可以在不同名稱空間,但是需要匯入擴充套件的 namespace 名稱空間後才能呼叫擴充套件的方法。
到此這篇關於C# 中的partial 關鍵字的文章就介紹到這了,更多相關C# partial 關鍵字內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45