C#语言设计-打字

C#语言设计-打字,c#,language-design,C#,Language Design,C#主要是stronglt类型,但也有一些奇怪的行为: e、 g.当滚动您自己的枚举器类时,您不必实现IEnumerable,您只需实现一个名为GetEnuerator()的方法,您仍然能够foreach覆盖它 对于某些Linq支持也是如此,您只需提供一些selectwhere方法等,就可以编写自己的Linq提供程序 那么为什么使用(x){}语句需要IDisposable呢 我确实明白为什么linq提供者可以用这种方式编写,因为没有固定的契约来填充,只有一种方法模式 为什么C#编译器(或语言规范

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

e、 g.当滚动您自己的枚举器类时,您不必实现IEnumerable,您只需实现一个名为GetEnuerator()的方法,您仍然能够
foreach
覆盖它

对于某些Linq支持也是如此,您只需提供一些
select
where
方法等,就可以编写自己的Linq提供程序

那么为什么
使用(x){}
语句需要IDisposable呢

我确实明白为什么linq提供者可以用这种方式编写,因为没有固定的契约来填充,只有一种方法模式


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

Eric Lippert在这里解释道:Re“弱类型”:(另外,我所知道的众多弱类型的定义中没有一个能涵盖这一点:它是静态检查类型的,只是从结构上而不是名义上进行检查。)因此,
foreach
的设计是这样的,因为.NET在最初出现时没有泛型。有趣的是:-)可能重复@JohnKoerner是的,重复。不知道为什么在命名这一个的时候,SO没有把这个问题作为一个提示。。古怪的