【发布时间】:2015-08-17 14:26:54
【问题描述】:
问题
我现在已经阅读了很多关于 Duck Typing 的内容,并且我似乎理解了这个概念。
我不明白的是,在什么情况下,放弃强类型化编程的好处而改用 Duck Typing 的好处才有意义。 在什么情况下会使用 Duck Typing 而不是接口和继承?
我的意思是,如果您无论如何都需要确保传递给方法的对象实现某些方法,我为什么不应该简单地定义一个接口?
为了清楚起见,我知道 Duck Typing 的工作原理。我想知道什么时候使用它才真正有意义。
澄清:
你会在什么情况下使用
public bool MyMethod(dynamic obj)
而不是
public bool MyMethod(ISomeInterface obj)
//or
public bool MyMethod(SomeBaseClass obj)
【问题讨论】:
-
考虑到在所有 .NET 中只有四五个鸭子类型(
foreach、await、LINQ、集合初始化器),而且它们都是在编译器端实现的,我没有理解你的问题。 -
haacked.com/archive/2007/08/19/… - 这里有一个标题为“当你可能使用 Duck Typing 时非常有用的用例”的部分
-
如果您不想在地狱中燃烧,请不要使用
dynamic。这是我自己的意见。而在我编写的 150 万个 os 源代码中,dynamic的使用次数有 2-3 次。 -
如果你认为你需要它,你就不需要它。如果您毫无疑问地知道自己确实需要它,那么您可能仍然不需要它,只是没有正确应用继承原则。
-
避免,避免,避免!但是...我写了很多使用这个概念的 DynamORM,从那次经验来看,我必须说这几乎是一件坏事。使用前请思考 10 次。当您制作一些后端并且不知道最终开发人员向您抛出什么问题时,动态很酷,例如您必须处理的 COM 或通用结构/类。
标签: c# duck-typing