Ich bemerkte, dass Aufrufe an Eigenschaftenaccessoren manchmal wie Methoden aussehen, wenn ich in eine Assembly denke.
%Vor% Nun war ich neugierig, und ich habe eine Methode mit einer ähnlichen Signatur in Class1
eingefügt, die wie die Standardkonvention für Accessoren aussieht.
Irgendwie behandelt der C # -Compiler immer noch get_Boolean
als Methode.
Was ist die magische Soße, um eine Methode zu erhalten, um eine Eigenschaft zu sein?
Eine .NET-Assembly enthält nicht nur Code, sondern auch Metadaten , die den Code beschreiben.
Bei einer Methode werden Metadaten ausgegeben, die den Namen, die Signatur usw. der Methode beschreiben.
Im Falle einer Eigenschaft X
wird sie als eine Reihe von Accessor-Methoden kompiliert ( get_X
und / oder set_X
), und für jede dieser Methoden werden die üblichen Methodenmetadaten ausgegeben. Dann werden zusätzliche Metadaten ausgegeben, die angeben, dass alle diese Zugriffsmethoden zusammen als eine logische Einheit (die Eigenschaft) zusammengehören.
Nun zurück zu Ihrem Beispiel: Wenn Sie eine Methode namens get_Boolean
mit C # definieren, gibt der C # -Compiler nur die Methodenmetadaten, aber keine zusätzlichen Eigenschaftenmetadaten aus. Im Wesentlichen muss der Compiler auswählen, welche Metadaten ausgegeben werden sollen. Und da Sie nicht die C # -Syntax für eine Eigenschaft, sondern für die Methodendeklarationssyntax verwendet haben, generiert der C # -Compiler Metadaten für.
Metadaten sind im ECMA 335-Standard
Tags und Links c# clr syntactic-sugar