2012-07-06 40 views
3

是否可以定義一個接口(例如MyClass Implements MyInterface),其方法/屬性定義已經與第三方(或本機)類上定義的某些方法/屬性匹配?可以在VB.NET中追溯實現一個接口嗎?

例如,DataRow類有許多使其「類似行」的屬性/方法。如果我想實現一個界面(即IRowLike),該界面定義了本地DataRow類(我不能直接觸摸或擴展)上已經存在的某些方法和屬性。我只是希望這個類在運行時同意它確實遵守一些接口。

接口提供了一個窮人版本的「鴨子打字」。一旦我有一組遵循給定接口的類,我就可以定義針對該接口的擴展方法,並且支持該接口的所有類將立即獲得新的行爲。我知道,想追溯應用第三方類的界面似乎很奇怪,但它肯定會讓我們用更少的代碼來做更多的事情。

回答

2

這在.Net中是不可能的。類型定義了它在編譯時在元數據中實現的接口,並且其定義在運行時不可改變。可以在運行時生成實現特定接口但不改變現有類型的類型

儘管有一些替代方法。在VB.Net中,您可以簡單地選擇對類型使用後期綁定,並以此方式訪問接口方法(或C#中的dynamic)。當然,缺點是代碼不是靜態可驗證的。

+0

我們店需要靜態綁定。感謝信息一樣。 :) – Mario 2012-07-06 19:25:49

+0

有趣的是現有的類型實際上並沒有被改變。我們所做的只是說這種類型與這個界面一致。它實際上並沒有改變這種類型的實現。 – Mario 2012-07-06 19:27:08

+2

不幸的是,這是因爲我無法使課程追溯訂閱一個接口,我最終將相同擴展方法的編碼變體與所有類型的變體進行了編碼。把它與3或4種對於許多類型有意義的其他方法相乘(在我們的例子中是用戶控件),並且最終一次又一次地寫入相同的邏輯。如果課程可以追溯到接口,那麼所有這些重複都可以被消除。我的意思是,什麼是界面,而是合同? – Mario 2012-07-06 19:31:55

相關問題