In C # tauchten all diese magischen Methoden auf, ohne von einer Schnittstelle gesichert zu werden. Warum wurde das gewählt?
Lassen Sie mich erklären.
Wenn in C # zuvor ein Objekt die IEnumerable
Schnittstelle implementiert hatte , konnte es automatisch von einer foreach
Schleife durchlaufen werden . Das macht für mich Sinn, da es durch eine Schnittstelle gesichert ist und wenn ich meine eigene Iterator
Funktion innerhalb der Klasse hätte, die durchlaufen wird, könnte ich das tun, ohne mir Sorgen zu machen, dass es auf magische Weise etwas anderes bedeuten würde.
Nun, anscheinend (nicht sicher wann), werden diese Schnittstellen nicht mehr benötigt. Es müssen nur die richtigen Namenskonvertierungen vorhanden sein.
Ein weiteres Beispiel besteht darin, ein Objekt durch eine Methode mit einem genauen Namen zu warten , GetAwaiter
die einige bestimmte Eigenschaften aufweist.
Warum nicht eine Schnittstelle erstellen, wie sie es mit dieser "Magie" gemacht hat IEnumerable
oder INotifyPropertyChanged
um sie statisch zu sichern?
Weitere Details zu dem, was ich hier meine:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
Was sind die Vor- und Nachteile magischer Methoden? Gibt es irgendwo im Internet etwas darüber, warum diese Entscheidungen getroffen wurden?
async
/ benötigen, await
funktioniert dies nur mit Code, der geschrieben wurde, nachdem .NET 4.5 weit genug verbreitet wurde, um ein brauchbares Ziel zu sein. Dies ist im Grunde genommen jetzt der Fall. Aber eine rein syntaktische Übersetzung in Methodenaufrufe ermöglicht es mir await
, vorhandene Typen nachträglich zu erweitern.
foreach
anfangs als Basisfunktionalität für eine Schleife implementiert . Es nie wurde für das Objekt eine Anforderung zur Umsetzung IEnumerable
für foreach
zu arbeiten. Es war nur eine Konvention, dies zu tun.