2013-05-12 27 views
1

我一直在關注的是,我可以找到的C#鴨子打字庫全部打破對象身份,即Object.ReferenceEquals爲鴨型對象及其原始對象返回false。不打破對象身份的C#鴨子類型庫?

我有一種感覺,它不可能在C#中實現無包裝/無代理的解決方案,但希望我錯了,任何人都知道一個不違反這個基本面向對象概念的庫?

編輯,被請求的代碼示例:

​​
+4

你能舉一個你想要實現的例子嗎?例如,你是否可以不使用C#4中的'dynamic'? – 2013-05-12 16:27:18

+2

我和@Jon在一起。動態是.net的duck打字隱喻,它肯定不會導致object.ReferenceEquals失敗。 – 2013-05-12 16:29:27

+2

@TonyHopkinson :)「我與喬恩」...當然你是,誰不是:)這是喬恩:)) – 2013-05-12 16:34:42

回答

1

從我的理解,給一個對象,其類型是未知的引用,但預計將有一個Quack方法與給定的簽名,你想產生一個類似簽名的方法Quack,它將調用原始對象中的適當方法。你還希望後一個對象應該比較引用等於原來的。你尋求的東西是不可能的。

您可能,但是,能夠定義或者在Object或一個泛型類型,將檢查其參數的類型,看它是否有一個Quack方法,如果是這樣叫它Quack擴展方法。每一個感興趣的方法簽名都需要一個單獨的樣板方法,但它可能會讓它們煮沸成約4-5行樣板代碼(調用一個常用方法來使用Reflection來找到類型中的相應成員並緩存結果)。