W C # zacząłem widzieć wyskakujące wszystkie magiczne metody, bez tworzenia kopii zapasowej przez interfejs. Dlaczego został wybrany?
Pozwól mi wyjaśnić.
Poprzednio w języku C #, jeśli obiekt implementował IEnumerableinterfejs, byłby automatycznie iterowalny przez foreachpętlę. Ma to dla mnie sens, ponieważ jest to wspierane przez interfejs, a jeśli miałbym mieć własną Iteratorfunkcję wewnątrz iteracji klasy, mógłbym to zrobić bez obawy, że to magicznie oznaczałoby coś innego.
Teraz najwyraźniej (nie wiadomo kiedy) te interfejsy nie są już wymagane. Po prostu musi mieć odpowiednie konwersje nazw.
Innym przykładem jest spowodowanie, że każdy obiekt będzie oczekiwany dzięki metodzie o nazwie dokładnie, GetAwaiter która ma kilka specyficznych właściwości.
Dlaczego nie stworzyć interfejsu takiego jak oni IEnumerablelub INotifyPropertyChangedstatycznie poprzeć tę „magię”?
Więcej szczegółów na temat tego, co mam na myśli tutaj:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
Jakie są zalety i wady magicznych metod i czy jest gdziekolwiek w Internecie, gdzie mogę znaleźć informacje na temat przyczyn podjęcia tych decyzji?
async/ await, to będzie on działał tylko z kodem, który został napisany po .NET 4.5 stał się wystarczająco rozpowszechniony, aby być realnym celem… co jest w zasadzie teraz. Ale czysto syntaktyczne tłumaczenie na wywołania metod pozwala mi dodać awaitfunkcjonalność do istniejących typów po fakcie.
foreachpętli na początku. Tam nigdy nie było wymagane dla obiektu w celu wdrożenia IEnumerabledo foreachdo pracy. To tylko konwencja.