В C # я начал видеть все эти магические методы, появляющиеся без поддержки интерфейса. Почему это было выбрано?
Позволь мне объяснить.
Ранее в C #, если объект реализовывал IEnumerable
интерфейс, он был бы автоматически повторяем foreach
циклом. Это имеет смысл для меня, так как он поддерживается интерфейсом, и если бы у меня была собственная Iterator
функция внутри класса, через которую итерируется, я мог бы сделать это, не беспокоясь о том, что это волшебным образом будет означать что-то другое.
Теперь, видимо, (не уверен, когда) эти интерфейсы больше не требуются. Это просто должно иметь правильные преобразования имен.
Другой пример - сделать любой объект ожидаемым, если у него будет метод с точным именем ,GetAwaiter
который имеет несколько специфических свойств.
Почему бы не создать интерфейс, подобный тому, как они это сделали, IEnumerable
или INotifyPropertyChanged
статически поддержать эту «магию»?
Подробнее о том, что я имею в виду здесь:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
Каковы плюсы и минусы магических методов, и есть ли где-нибудь в Интернете, где я могу найти что-нибудь о том, почему эти решения были приняты?
async
/ await
, то он будет работать только с кодом, написанным после того, как .NET 4.5 стал достаточно распространенным, чтобы стать жизнеспособной целью ... что в основном и сейчас. Но чисто синтаксический перевод в вызовы методов позволяет мне добавить await
функциональность к существующим типам по факту.
foreach
возврата назад в начале. Там никогда не было требования для объекта для реализации IEnumerable
для foreach
работы. Просто так было принято.