2013-05-12 28 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来找到类型中的相应成员并缓存结果)。