2010-02-22 3 views

Antwort

8

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.

+1

Der Compiler verwendet zum Compiler-Zeitpunkt auch das ObsoleteAttribute. – plinth

1

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.

0

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

-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

+0

Ja, du hast Recht ... Ich habe diese Fälle vergessen ... Veraltet ist ein anderes. –

12

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.

Verwandte Themen