gpt4 book ai didi

c# - 什么时候使用 Duck Typing?

转载 作者:太空狗 更新时间:2023-10-29 18:11:50 26 4
gpt4 key购买 nike

问题

我现在已经阅读了很多关于 Duck Typing 的内容,并且我似乎理解了这个概念。

我不明白的是,在什么情况下放弃强类型化编程的好处而转向 Duck Typing 的好处实际上是有意义的。 在什么情况下会使用 Duck Typing 而不是接口(interface)和继承?

我的意思是,如果您无论如何都需要确保传递给方法的对象实现某些方法,为什么我不应该简单地定义一个接口(interface)?

澄清一下,我知道 Duck Typing 的工作原理。我想知道什么时候真正有意义地使用它。

澄清:

在什么情况下你会使用

public bool MyMethod(dynamic obj)

代替

public bool MyMethod(ISomeInterface obj)
//or
public bool MyMethod(SomeBaseClass obj)

最佳答案

C# 具有强类型是有原因的。除非您有充分的理由(例如需要 COM 互操作)使用 dynamic 类型,否则您应该像避免瘟疫一样避免使用它,否则您将面临将编译时问题转化为运行时问题的风险。 dynamic 功能强大,但容易被滥用。仔细考虑您是否真的需要动态类型 - 如果您认为需要,那么您很可能一开始就错误地解决了问题,并且需要重构您的代码。

具体回答您的问题 - 一个潜在用例是,如果您正在编写序列化代码并需要接受反序列化对象,例如来自 Web API 请求的反序列化 JSON 结构。此类方法需要处理提供给它们的任何类型,在这种情况下,使用 dynamic 优于替代方法(即大量反射)。

我能想到的另一个例子是与特定于动态语言运行时的语言(例如 JavaScript、IronPython、IronRuby 等)的互操作性,并且需要编写一种方法来接受来自这些语言的类型。

来自 Beginning Visual C# 2012 Programming :

For most C# code that you write, avoid the dynamic keyword. However, if a situation arises where you need to use it, use it and love it - and spare a thought for those poor programmers of the past who didn't have this powerful tool at their disposal.

关于c# - 什么时候使用 Duck Typing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30619060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com