Was ist bedingtes Attribut?
Ein bedingtes Attribut ist ein Tag, der verwendet wird, um eine Methode oder Klasse zu markieren, deren Ausführung von der Definition des Vorverarbeitungsbezeichners abhängt.
Ein Bedingungsattribut gibt eine Bedingung an, um bedingte Kompilierung anzugeben, wobei Methoden auf der Grundlage der Definition von Symbolen selektiv aufgerufen werden. Er weist den Compiler an, (basierend auf einer Bedingung) (in Microsoft Intermediate Language) zu kompilieren oder bestimmte Codeblöcke nicht zu kompilieren – unabhängig davon, ob ein bestimmtes bedingtes Kompilierungssymbol definiert ist oder nicht. Wenn bestimmte Symbole nicht zum Zeitpunkt des Aufrufs definiert wurden, werden Aufrufe an diese Methode oder Klasse vom Compiler ignoriert.
Ein bedingtes Attribut hat die folgenden Eigenschaften:
Sie kann auf Methoden und Klassen angewendet werden, jedoch nur, wenn sie von einem Attribut abgeleitet sind.
Beim Anwenden eines bedingten Attributs auf eine Klasse wird die Attributklasse nur dann an Metadaten gesendet, wenn das Symbol für bedingte Kompilierung definiert ist.
Es benötigt einen Parameter, der das Kompilierungssymbol darstellt.
Die Argumente, die an eine bedingte Methode oder Attributklasse übergeben werden, werden vom Compiler typisiert.
Es wird vollständig vom Compiler und nicht von der Laufzeit erledigt.
Es kann nicht auf eine Methode angewendet werden, die in einem Delegate-Creation-Ausdruck verwendet wird.
Es wirkt sich nicht auf den für die bedingte Methode generierten Code aus, hat jedoch Auswirkungen auf den Aufruf der Methode.
Ein bedingtes Attribut liefert ein deklaratives Programmiermuster und hilft, den Quellcode einfach zu pflegen. Durch die Anwendung eines bedingten Attributs auf Methodenebene ist der Quellcode besser lesbar. Der Aufrufer einer Methode benötigt keinen zusätzlichen Code für die bedingte Kompilierung. Ein Bedingungsattribut wird verwendet, um Ablaufverfolgungs und Protokollierungsfunktionalitäten in den Debug-Builds zu aktivieren, indem der Identifikator DEBUG zum Anzeigen und Protokollieren von Diagnoseinformationen in Bezug auf die Anwendung verwendet wird. Außerdem hilft es, die Logik im Zusammenhang mit dem Debug-Build (in Systemen, die für die Entwicklung verwendet werden) von Release-Builds zu trennen, die in Sites und Anwendungen bereitgestellt werden. Um mehrere Editionen (mit ausgewählten Funktionen in einer Edition) einer Software ohne Code-Duplizierung zu verwalten,
Es folgen einige Regeln, die bei der Verwendung eines bedingten Attributs zu beachten sind:
Eine bedingte Methode in einer Klassen- oder Strukturdeklaration muss den Rückgabetyp void haben.
Bei der Verwendung mehrerer Bezeichner als bedingte Attribute basiert die Einbeziehung der Methode (en) auf dem Ergebnis von logischem ODER oder logischem UND auf den definierten Symbolen.
Es kann für eine Methode in einer Schnittstellendeklaration nicht angegeben werden.
Einer bedingten Methode kann kein Schlüsselwort ‚override‘ vorangestellt werden, sie kann jedoch virtuell sein. Wenn es überschrieben wird, wird es implizit als bedingt betrachtet.
Symbole, die für die bedingte Kompilierung berücksichtigt werden, können als Compiler-Befehlszeilenoptionen oder als Umgebungsvariablen aus der Betriebssystem-Shell oder als Pragmas (unter Verwendung der Präprozessor-Direktive ‚#define‘) im Quellcode definiert werden.
Im Gegensatz zu C ++ kann die Definition von Symbolen in C # in beliebiger Reihenfolge erfolgen und daher muss die Reihenfolge zwischen ‚#define‘ und einer bedingten Methode richtig festgelegt werden.
Obwohl die Verwendung von ‚#if und #endif‘ eine alternative Option für das bedingte Attribut darstellt, bietet das letztere im Vergleich zu ersteren einen saubereren, eleganteren und weniger fehleranfälligen Ansatz. Intern besteht der Unterschied darin, dass bei der Verwendung eines bedingten Attributs für eine Methode die Methode immer noch Teil der Assembly ist und nicht geladen wird. Im Falle von #if / #endif ist die Methode in der Assembly selbst nicht sichtbar.