我现在已经阅读了很多关于Duck Typing的内容,我似乎理解了这个概念.
我不明白的是,在什么情况下,放弃强大的典型编程的好处对于Duck Typing的好处是有效的.在什么情况下会使用Duck Typing而不是Interfaces和Inheritance?
我的意思是,如果你无论如何需要确保传递给Method的对象实现某些方法,为什么我不应该简单地定义一个接口?
为了清楚起见,我知道Duck Typing是如何工作的.我想知道何时使用它真的很有意义.
在哪种情况下你会使用
public bool MyMethod(dynamic obj)
Run Code Online (Sandbox Code Playgroud)
代替
public bool MyMethod(ISomeInterface obj)
//or
public bool MyMethod(SomeBaseClass obj)
Run Code Online (Sandbox Code Playgroud)
Tom*_*vin 13
C#有很强的打字理由.除非你有正当理由(例如需要COM互操作)才能使用该dynamic类型,否则你应该像瘟疫那样避免使用它,否则你就有可能将编译时问题转化为运行时问题.dynamic是强大的,但容易滥用.如果你真的需要动态打字,请仔细思考 - 如果你认为有,那么你有可能在开始时遇到问题,并且需要重构你的代码.
要专门回答您的问题 - 一个潜在的用例是您编写序列化代码并需要接受反序列化对象,例如来自Web API请求的反序列化JSON结构.这些方法需要处理给予它们的任何类型,这是一种使用dynamic比替代方案更好的情况(即卡车负载的反射).
我能想到的另一个例子是与动态语言运行时语言的互操作性(例如JavaScript,IronPython,IronRuby,......),并且需要编写一个接受这些语言类型的方法.
对于您编写的大多数C#代码,请避免使用
dynamic关键字.然而,如果出现需要使用它的情况,使用它并喜欢它 - 并且为那些没有这个强大工具的过去那些可怜的程序员提供思想.
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |