2010-08-11 19 views

回答

6

從本質上講,部分方法最有用的目的是讓代碼生成系統提供一個API來擴展其屬性和方法的功能而不使用繼承。

查看任何Linq to SQL數據模型的快速示例。

生成的代碼包含部分方法,如果在您自己的部分類中實現,則允許在現有屬性中執行驗證邏輯,事件通知等。

使部分方法更具吸引力的是,如果您沒有在自己的部分類中實現它們,則它們不會被髮射到編譯代碼中,從而提供適度的效率提升。

這裏有一個體面的博客條目,演示如何使用的部分方法注入驗證邏輯:

http://www.davidhayden.com/blog/dave/archive/2007/07/24/LINQToSQLValidationEnterpriseLibraryValidationApplicationBlock.aspx

2

據我瞭解,主要好處之一是有能力的代碼生成「存根「,您可以選擇是否執行。所以你的代碼創建一個部分方法並調用一些驗證方法。爲了「插入」你的驗證,你只需實現部分方法。 「部分」關鍵字允許相對乾淨的開發過程。

10

Partial Class and Methods (C# Programming Guide)上MSDN:

的局部類或結構可以包含一個局部方法。該類的一部分包含該方法的簽名。可選的實現可以在相同的部分或另一部分中定義。 如果未提供實現,則在編譯時刪除方法和對該方法的所有調用。

部分方法使類的一部分的實現者能夠定義類似於事件的方法。 類的其他部分的實現者可以決定是否實現該方法。如果該方法未實現,則編譯器將刪除方法簽名以及對該方法的所有調用。對該方法的調用(包括在調用中對參數進行評估時發生的任何結果)在運行時不起作用。因此,即使未提供實現,部分類中的任何代碼都可以自由使用部分方法。如果調用方法但未實現,則不會導致編譯時或運行時錯誤。

部分方法作爲自定義生成代碼的一種方式特別有用。它們允許保留方法名稱和簽名,以便生成的代碼可以調用該方法,但開發人員可以決定是否實施該方法。就像部分類一樣,部分方法可以使由代碼生成器創建的代碼和由人類開發人員創建的代碼一起工作,而無需運行時成本。

在我看來,我會建議避免使用這些,除非你對他們有特殊的需求。

+0

+1沒有意識到未實現的部分方法被編譯器刪除。 – 2010-08-11 23:37:47

3

生成的代碼。簡單而簡單,這是他們實施的頭號原因。看看像WPF的東西。 UI在XAML中以聲明方式完成,「代碼隱藏」在C#中。通過使用部分類概念,兩個部分是相同的類拆分

+0

問題涉及部分*方法*,但這個答案解決部分*類*。雖然在[同一文章](https://msdn.microsoft.com/en-us/library/wa80x488.aspx)中的MSDN上記錄,但它們並不相同。 – DavidRR 2016-04-06 14:54:17