【发布时间】:2011-02-19 08:16:40
【问题描述】:
在 Scala 中,我可以将structural types 定义如下:
type Pressable = { def press(): Unit }
这意味着我可以定义一个函数或方法,它以可按下的东西作为参数,如下所示:
def foo(i: Pressable) { // etc.
我传递给此函数的对象必须为它定义了一个名为 press() 的方法,该方法与类型中定义的类型签名相匹配 - 不接受任何参数,返回 Unit(Scala 的 void 版本)。
我什至可以使用内联结构类型:
def foo(i: { def press(): Unit }) { // etc.
它基本上允许程序员拥有鸭子类型的所有好处,同时仍然具有编译时类型检查的好处。
C# 有类似的东西吗?我在 Google 上搜索过,但找不到任何东西,但我对 C# 并不熟悉。如果没有,有没有计划添加这个?
【问题讨论】:
-
差不多十年后,我没有看到任何关于 C# 中结构类型的消息......我想知道为什么。他们在 Gosu 中有它,这肯定会减少开发人员的工作量:gosu-lang.github.io/2014/04/22/structural-types-in-gosu.html。
标签: c# scala duck-typing type-systems structural-typing