我還沒有真正得到部分方法的好處。任何人都可以說明部分方法非常適合解決這個問題嗎?請說明部分方法解決的問題
回答
從本質上講,部分方法最有用的目的是讓代碼生成系統提供一個API來擴展其屬性和方法的功能而不使用繼承。
查看任何Linq to SQL數據模型的快速示例。
生成的代碼包含部分方法,如果在您自己的部分類中實現,則允許在現有屬性中執行驗證邏輯,事件通知等。
使部分方法更具吸引力的是,如果您沒有在自己的部分類中實現它們,則它們不會被髮射到編譯代碼中,從而提供適度的效率提升。
這裏有一個體面的博客條目,演示如何使用的部分方法注入驗證邏輯:
據我瞭解,主要好處之一是有能力的代碼生成「存根「,您可以選擇是否執行。所以你的代碼創建一個部分方法並調用一些驗證方法。爲了「插入」你的驗證,你只需實現部分方法。 「部分」關鍵字允許相對乾淨的開發過程。
從Partial Class and Methods (C# Programming Guide)上MSDN:
的局部類或結構可以包含一個局部方法。該類的一部分包含該方法的簽名。可選的實現可以在相同的部分或另一部分中定義。 如果未提供實現,則在編譯時刪除方法和對該方法的所有調用。
部分方法使類的一部分的實現者能夠定義類似於事件的方法。 類的其他部分的實現者可以決定是否實現該方法。如果該方法未實現,則編譯器將刪除方法簽名以及對該方法的所有調用。對該方法的調用(包括在調用中對參數進行評估時發生的任何結果)在運行時不起作用。因此,即使未提供實現,部分類中的任何代碼都可以自由使用部分方法。如果調用方法但未實現,則不會導致編譯時或運行時錯誤。
部分方法作爲自定義生成代碼的一種方式特別有用。它們允許保留方法名稱和簽名,以便生成的代碼可以調用該方法,但開發人員可以決定是否實施該方法。就像部分類一樣,部分方法可以使由代碼生成器創建的代碼和由人類開發人員創建的代碼一起工作,而無需運行時成本。
在我看來,我會建議避免使用這些,除非你對他們有特殊的需求。
生成的代碼。簡單而簡單,這是他們實施的頭號原因。看看像WPF的東西。 UI在XAML中以聲明方式完成,「代碼隱藏」在C#中。通過使用部分類概念,兩個部分是相同的類拆分
問題涉及部分*方法*,但這個答案解決部分*類*。雖然在[同一文章](https://msdn.microsoft.com/en-us/library/wa80x488.aspx)中的MSDN上記錄,但它們並不相同。 – DavidRR 2016-04-06 14:54:17
- 1. 部分缺乏標題解決方法
- 2. HEAD請求問題的解決方案
- 3. SnarQube compute()方法內部的問題解決方法null
- 4. 問題與解析OG:類型似乎是無法解決的,請提出明確的解決方案
- 5. 不同的行數取決於php sql查詢的語法問題。請說明
- 6. 邏輯問題..請解決
- 7. 具有UILabel行爲的自動解決方案無法說明
- 8. android-無法解決方法getSystemService問題
- 9. 解決菜單問題的方法
- 10. 解決url問題的更好方法
- 11. 需要的解決方法問題
- 12. 「分配問題」解決的問題
- 13. 解決語法問題的實用解決方案
- 14. 解決Android相關問題的解決方法
- 15. 找到最嵌套的方法(),用SymPy解決問題並解決問題?
- 16. 移動Web應用程序的解決方法積分問題?
- 17. Bootstrap data-target問題解決方法
- 18. 解決方法x構建問題Unity3D
- 19. 使用CodeDom的VB.NET部分方法的解決方法?
- 20. 解決劃分問題
- 21. javascript-> php加密解密 - 需要說明和方法請
- 22. Javascript的setExpression對我來說是最大的問題。任何解決方案來解決這個問題
- 23. 關於訪問方法的說明
- 24. removeNodeAfter方法說明
- 25. X509Chain.Build()方法說明
- 26. Ruby方法說明
- 27. C#新手問題,部分2 - 聲明類和方法
- 28. 解決方法無法重新聲明?
- 29. DataEvent.UPLOAD_COMPLETE_DATA無法解決問題
- 30. Sonarqube無法解決問題
+1沒有意識到未實現的部分方法被編譯器刪除。 – 2010-08-11 23:37:47