注意这不是关于如何在 C# 中实现或模拟鸭子类型的问题...
几年来,我的印象是某些 C# 语言特性依赖于语言本身定义的数据结构(在我看来,这总是一个奇怪的鸡和蛋的场景)。例如,我的印象是foreach循环仅可用于已实现的类型IEnumerable。
从那时起,我开始明白 C# 编译器使用鸭子类型来确定对象是否可以在 foreach 循环中使用,寻找GetEnumerator方法而不是IEnumerable. 这很有意义,因为它消除了鸡和蛋的难题。
我有点困惑,为什么using块和IDisposable. 编译器是否有任何特殊原因不能使用鸭子类型并寻找Dispose方法?这种不一致的原因是什么?
也许 IDisposable 的幕后还有其他事情发生?
讨论为什么你会有一个没有实现 IDisposable 的 Dispose 方法的对象超出了这个问题的范围:)