注これは、C#でダックタイピングを実装またはエミュレートする方法についての質問ではありません...
数年の間、特定のC#言語機能は、言語自体で定義されたデータ構造に依存しているという印象を受けました(これは、私には常に奇妙な鶏と卵のシナリオのように見えました)。たとえば、foreach
ループはを実装した型でのみ使用できるという印象を受けましたIEnumerable
。
GetEnumerator
それ以来、C#コンパイラはダックタイピングを使用して、オブジェクトがforeachループで使用できるかどうかを判断し、ではなくメソッドを探すことを理解するようになりましたIEnumerable
。これは、鶏肉と卵の難問を取り除くので、非常に理にかなっています。
using
なぜこれがブロックとの場合ではないように思われるのかについて、私は少し混乱していIDisposable
ます。Dispose
コンパイラがダックタイピングを使用してメソッドを探すことができない特別な理由はありますか?この不一致の理由は何ですか?
おそらく、IDisposableの内部で何か他のことが起こっているのでしょうか?
IDisposableを実装していないDisposeメソッドを持つオブジェクトがある理由を説明することは、この質問の範囲外です:)