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