2011-01-30 76 views
0

是否有可能通過引用包含擴展方法的名稱空間將代碼注入到類中,從而模擬某些接口的基類實現?或者這被認爲是不好的做法(即使這是不可能的)?'使用擴展方法將'注入'類實現並因此實現接口?

Imports MyApp.Extensions 

Class SomeClass : Inherits System.SomeBaseClass : Implements MyApp.IAppInterface 

End Class 

Public Interface IAppInterface 
    Sub InterfaceMethod() 
End Interface 


Namespace MyApp.Extensions 
    Public Module SomeClassExtensions 
     Public Sub InterfaceMethod(ByVal someClass as MyApp.SomeClass) 
      //Implementation 
     End Sub 
    End Module 
End Namespace 
+0

不,這是不可能的。 – Josh 2011-01-30 18:44:15

回答

1

問題是,您的SomeClassExtensions.InterfaceMethod將如何執行?即在IAppInterface中將定義什麼屬性/方法,以便在擴展方法中有足夠的數據/行爲來實現它?我想你會發現接口必須有一個「基本」方法集才能使它有意義。

最重要的是,人們通常在接口上定義其他方法,以使其更適合調用者 - 這些方法實際上只是「基本」接口方法組合的組合。這些便利的方法非常適合從接口中刪除,並通過擴展方法完全定義。這樣可以減輕接口實現者的負擔,使其不必執行這些便捷方法(便捷方法通常以相同的方式編碼,無論實現如何),同時仍允許呼叫者享受調用它們的好處。

+0

所以這實際上是一個非情況? – Ropstah 2011-01-30 18:43:00

0

我認爲你誤解了什麼樣的擴展方法。 Here是關於與擴展方法有關的設計模式的問題。擴展方法的本體是它們將動作「附加」到對象而不是通常的「是」關係。你不能用它們來實現接口方法,因爲擴展方法所附的任何對象都是非抽象的(你已經實例化了,對嗎?),所以這會導致編譯錯誤。