In .Net, ist das Attribut Feature zur Kompilierzeit oder Laufzeit oder beides? Kannst du mir ein paar Beispiele geben?Wird die .Net-Attributfunktion zur Kompilierungszeit oder zur Laufzeit oder beides verwendet?
Antwort
Attribute werden bei der Kompilierung als Metadaten an die Assembly ausgegeben. Diese Metadaten werden dann zur Laufzeit über Reflektion verwendet - zum Beispiel über GetCustomAttributes()
.
Einige Attribute vom Compiler bei der Kompilierung mitgenutzt. Zum Beispiel schaut der Compiler auf die AttributeUsageAttribute
um festzustellen, ob ein Attribut für ein bestimmtes Objekt verwendet werden kann.
Attribute werden in den Code während der Kompilierung kompiliert, aber sie werden oft zur Laufzeit verwendet als löst die Dinge anders zu tun.
Der Compiler fügt hinzu, welche Metadaten zu dem Objekt aufgerufen wird, das mit einem Attribut versehen ist. Diese Metadaten, unabhängig davon, ob sie über Attribute oder auf andere Weise erstellt wurden, sind alle zur Laufzeit durch Reflection zugänglich. So können Sie mit Attributen dekorieren und dann die Details lesen, wenn das Programm läuft. Zu sagen, dass die Metadaten zur Kompilierzeit "benutzt" werden, ist jedoch nicht ganz korrekt, da es dem Compiler egal ist, welche Metadaten es gibt.
-1: In einigen Fällen beeinflussen Attribute die Kompilierung auf sinnvolle Weise. Das Bedingte Attribut wird beispielsweise hauptsächlich zur Kompilierungszeit verwendet und kann Compilerfehler auslösen, wenn es nicht ordnungsgemäß verwendet wird. – Brian
Ja, du hast Recht ... Ich habe diese Fälle vergessen ... Veraltet ist ein anderes. –
meisten werden zur Laufzeit nur verwendet. Eine sehr begrenzte Anzahl wird vom Compiler verwendet werden, einschließlich:
[Conditional(...)]
- Methodenaufrufe per build Symbole[Obsolete(...)]
wegzulassen - emittieren eine Warnung/Fehler als Buildausgabe[Serializable]
- wird als CLI-Flag geschrieben[Extension]
- verwendet für Erweiterungsmethoden[AttributeUsage]
- beeinflusst, wie Attribute angewendet werden -
Es gibt eine Reihe von Dingen wie [AssemblyVersion]
, [AssemblyFileVersion]
usw., die vom Compiler beim Erstellen der Assemblydatei verwendet werden, und Dinge wie [InternalsVisibleTo]
, die die Zugänglichkeit beeinflussen.
Zusätzlich Tools wie Postsharp tun zusätzliche post-kompilieren Schritte basierend auf Attribute.
Es gibt einige andere Attribute, die dem Compiler erzeugten Arten/Methoden (Anon-Methoden/Typen, Iterator Blöcke usw.) hinzufügen.
- 1. java.lang.ClassCastException zur Laufzeit oder Compiler-
- 2. Koordinatenerzeugung zur Kompilierungszeit
- 3. Werden Anweisungen/Anweisungen zur Laufzeit oder zur Montagezeit ausgeführt?
- 4. TD wird zur Laufzeit erweitert
- 5. Warum wird extern "C" mit gemeinsamer Objektbibliothek zur Laufzeit verwendet?
- 6. Sellerie oder Bohnenstange oder beides?
- 7. Kategorien, Tags oder beides?
- 8. Speichern xamlx zur Laufzeit
- 9. Kann garantierte UB zur Kompilierungszeit zurückgewiesen werden?
- 10. Animation zur Laufzeit hinzufügen
- 11. Verwendet ein typisiertes Dataset zur Laufzeit Reflektion?
- 12. MasterPageFile zur Laufzeit wechseln
- 13. Rails: format.js oder format.json oder beides?
- 14. die Annotationsinformationen zur Laufzeit abrufen
- 15. Erweitern oder Hinzufügen neuer Klassen zur Laufzeit in Java
- 16. Java-Reflektion: Wie überschreibe oder generiere ich Methoden zur Laufzeit?
- 17. Hibernate-Datenbankkennwort zur Laufzeit
- 18. Vtable-Änderungen zur Laufzeit
- 19. Klassenimplementierung zur Laufzeit (Java)
- 20. JPA-Kaskadenoptionen zur Laufzeit
- 21. create Tframes zur Laufzeit:
- 22. Zeile zur Laufzeit zur Tabelle hinzufügen
- 23. Ändern des log4net-Konvertierungsmusters oder -Layouts zur Laufzeit
- 24. Ist die Anforderung zur Internet-Persmission zur Laufzeit (Android) erforderlich?
- 25. Ist FLAG_ONLY_ALERT_ONCE defekt oder falsch oder beides?
- 26. Einstellung "Modal" zur Laufzeit
- 27. Concat linq zu Objekten Oder Abfragen mit LINQKIT zur Laufzeit
- 28. "conetexpr" -Ausführung bestimmen - während der Kompilierung oder zur Laufzeit?
- 29. Bean zur Laufzeit ersetzen
- 30. Ich bekomme java.lang.UnsatisfiedLinkError zur Laufzeit
Der Compiler verwendet zum Compiler-Zeitpunkt auch das ObsoleteAttribute. – plinth