У 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до роботи. Просто це було домовлено про це.