C#语言设计 - ducktyping

Rog*_*son 7 c# language-design

C#主要是强类型的,但是,有一些奇怪的行为:

例如,在滚动自己的枚举器类时,您不必实现IEnumerable,您只需实现一个名为GetEnuerator()的方法,您仍然可以foreach覆盖它.

一些Linq支持也是如此,你可以通过提供一些select where方法等来编写自己的Linq提供者.

那么为什么using(x){}声明需要IDisposable ?

我确实知道为什么linq提供者可以用这种方式编写,因为没有固定的完全合同,只有一种方法模式.

为什么C#编译器(或语言规范?)的设计方式使得某些内置语言结构需要接口,而其他人不需要接口?