а также
ь Этоне вопрос о том, как реализовать или подражать утиной типизации в C # ...
В течение нескольких лет у меня сложилось впечатление, что некоторые особенности языка C # зависели от структур данных, определенных в самом языке (что мне всегда казалось странным сценарием «курица и яйцо»). Например, у меня сложилось впечатление, чтоforeach
Цикл был доступен только для использования с типами, которые реализованыIEnumerable
.
С тех пор я понял, что компилятор C # использует утку, чтобы определить, можно ли использовать объект в цикле foreach, ищаGetEnumerator
метод, а неIEnumerable
, Это имеет большой смысл, так как устраняет головоломку с курицей и яйцом.
Я немного сбит с толку относительно того, почему это не похоже на случай сusing
блок иIDisposable
, Есть ли какая-то конкретная причина, по которой компилятор не может использовать утку, набираяDispose
метод? В чем причина этого несоответствия?
Возможно, что-то еще происходит под капотом с IDisposable?
Обсуждая, почему вы быКогда-либо есть объект с методом Dispose, который не реализовал IDisposable, выходит за рамки этого вопроса :)