refactoring - Duck 类型作为反射的语法糖 : Good or bad idea?

标签 refactoring language-design syntactic-sugar duck-typing

我最近一直在想,在 Java 和 C# 等语言中,将“鸭子类型(duck typing)”类型作为方法参数类型包含在内是否是一种很好的语法糖形式?这将如下所示:

void myFunction(duck foo) {
   foo.doStuff();
}

这可以是通过反射调用 doStuff() 的语法糖,也可以以不同的方式实现。 Foo 可以是任何类型。如果 foo 没有 doStuff() 方法,这将引发运行时异常。关键是,当您需要它们时,即大多数时候,您将获得更严格的预先指定的接口(interface)范例(性能、错误检查)的好处。同时,您将拥有一个简单、干净的后门来避免打字,这将允许您干净地进行初始设计中未预见到的更改,而无需进行大规模重构。此外,它可能会 100% 向后兼容,并与现有的语言结构完美结合。我认为这可能有助于减少过度设计的以防万一的编程风格,这种风格会导致困惑、困惑的 API。您认为这样的事情在 C# 和 Java 等静态 OO 语言中是好事还是坏事?

最佳答案

dynamic关键字支持这些确切的语义并将在 C# 4.0 中。

不过,这不仅仅是为了反射(reflection)。它是 dynamic dispatch 的实现只有在没有其他机制可用时才使用反射。

This question也有很多很好的信息。

关于refactoring - Duck 类型作为反射的语法糖 : Good or bad idea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/311626/

相关文章:

python - Django:删除未使用的文件

Python:子类可以重载继承的方法吗?

scheme - 在 Scheme 中,普通的、未引用的列表是否有语法糖?

data-structures - Prolog 中的自定义数据结构语法

syntax - 非 Lisp 语言中有哪些宏系统?

javascript - 如何在页面之间共享 jQuery 脚本?

swift - 除了重构和重命名类或属性名称之外,swift 中还有什么其他可用选项?

compiler-construction - 是否有可能制作高级编译语言?

Groovy star 导入和 "partial"包的使用

sql - 为什么ORACLE在命令中不允许连续的换行符?