1
我一直在关注的是,我可以找到的C#鸭子打字库全部打破对象身份,即Object.ReferenceEquals
为鸭型对象及其原始对象返回false。不打破对象身份的C#鸭子类型库?
我有一种感觉,它不可能在C#中实现无包装/无代理的解决方案,但希望我错了,任何人都知道一个不违反这个基本面向对象概念的库?
编辑,被请求的代码示例:
我一直在关注的是,我可以找到的C#鸭子打字库全部打破对象身份,即Object.ReferenceEquals
为鸭型对象及其原始对象返回false。不打破对象身份的C#鸭子类型库?
我有一种感觉,它不可能在C#中实现无包装/无代理的解决方案,但希望我错了,任何人都知道一个不违反这个基本面向对象概念的库?
编辑,被请求的代码示例:
从我的理解,给一个对象,其类型是未知的引用,但预计将有一个Quack
方法与给定的签名,你想产生一个类似签名的方法Quack
,它将调用原始对象中的适当方法。你还希望后一个对象应该比较引用等于原来的。你寻求的东西是不可能的。
您可能,但是,能够定义或者在Object
或一个泛型类型,将检查其参数的类型,看它是否有一个Quack
方法,如果是这样叫它Quack
扩展方法。每一个感兴趣的方法签名都需要一个单独的样板方法,但它可能会让它们煮沸成约4-5行样板代码(调用一个常用方法来使用Reflection来找到类型中的相应成员并缓存结果)。
你能举一个你想要实现的例子吗?例如,你是否可以不使用C#4中的'dynamic'? – 2013-05-12 16:27:18
我和@Jon在一起。动态是.net的duck打字隐喻,它肯定不会导致object.ReferenceEquals失败。 – 2013-05-12 16:29:27
@TonyHopkinson :)“我与乔恩”...当然你是,谁不是:)这是乔恩:)) – 2013-05-12 16:34:42