没有什么特别之处
IDisposable这里-但有 是 什么特别的迭代器。
C#2,使用这种类型的鸭子之前
foreach是 只 为你可以实现一个强类型的迭代器,并遍历值类型,而拳击的唯一途径。我 怀疑
如果C#和.NET都具有泛型,
foreach那么就 需要 使用泛型
IEnumerable<T>,而没有鸭子类型。
现在,编译器在其他几个我可以想到的地方使用了这种鸭子输入:
- 集合初始化器寻找合适的
Add
重载(以及必须实现的类型IEnumerable
,只是为了表明它确实是某种类型的集合);这允许灵活地添加单个项目,键/值对等 - LINQ(
Select
等)-这是LINQ实现其灵活性的方式,允许针对多种类型使用相同的查询表达式格式,而无需更改IEnumerable<T>
自身 - C#5等待表达式需要
GetAwaiter
返回一个具有IsCompleted
/OnCompleted
/ 的等待类型GetResult
在这两种情况下,这都使得将功能添加到现有类型和接口上变得更加容易,而以前的概念和概念并不存在。
鉴于
IDisposable自第一个版本以来该框架就已经存在,因此我认为使用鸭子输入
using语句不会有任何好处。我知道您明确尝试取消讨论中
Dispose没有执行的原因
IDisposable,但是我认为这很关键。有充分的理由在语言中实现功能,我认为鸭子类型是支持已知接口的重要功能。如果这样做没有明显的好处,那么它就不会以该语言出现。



