Inhaltsverzeichnis:
Definition - Was bedeutet Bedingtes Attribut?
Ein Bedingungsattribut ist ein Tag, mit dem eine Methode oder Klasse gekennzeichnet wird, deren Ausführung von der Definition der Vorverarbeitungs-ID abhängt.
Ein Bedingungsattribut gibt eine Bedingung an, um die bedingte Kompilierung anzugeben, bei der Methoden auf der Grundlage der Definition von Symbolen selektiv aufgerufen werden. Es weist den Compiler an, bestimmte Codeblöcke basierend auf einer Bedingung zu kompilieren (in Microsoft Intermediate Language) oder nicht zu kompilieren - unabhängig davon, ob ein bestimmtes bedingtes Kompilierungssymbol definiert ist oder nicht. Wenn zum Zeitpunkt des Aufrufs keine bestimmten Symbole definiert wurden, werden Aufrufe dieser Methode oder Klasse vom Compiler ignoriert.
Techopedia erklärt das bedingte Attribut
Ein Bedingungsattribut weist die folgenden Merkmale auf:
- 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 in Metadaten ausgegeben, wenn das Symbol für die bedingte Kompilierung definiert ist.
- Es benötigt einen Parameter, der das Identifizierungssymbol ist, das die Kompilierung steuert.
- Die an eine bedingte Methode oder Attributklasse übergebenen Argumente werden vom Compiler typüberprüft.
- Es wird vollständig vom Compiler und nicht von der Laufzeit erledigt.
- Es kann nicht auf eine Methode angewendet werden, die in einem Ausdruck zur Delegatenerstellung verwendet wird.
- Dies wirkt sich nicht auf den Code aus, der für die bedingte Methode generiert wurde, wirkt sich jedoch auf den Aufruf der Methode aus.
Ein Bedingungsattribut bietet ein deklaratives Programmiermuster und hilft dabei, den Quellcode einfach zu verwalten. Durch Anwenden eines bedingten Attributs auf Methodenebene ist der Quellcode besser lesbar. Der Aufrufer einer Methode muss keinen zusätzlichen Code für die bedingte Kompilierung verwenden. Ein Bedingungsattribut wird verwendet, um die Trace- und Protokollierungsfunktionen in den Debugbuilds zu aktivieren, indem mit dem Bezeichner DEBUG Diagnoseinformationen zur Anwendung angezeigt und protokolliert werden. Außerdem können Sie die Logik für den Debugbuild (in Systemen, die für die Entwicklung verwendet werden) von Releasebuilds trennen, die an Standorten und in Anwendungen bereitgestellt werden. Um mehrere Editionen (mit ausgewählten Funktionen in einigen Editionen) einer Software ohne Codeduplizierung zu verwalten, bildet die bedingte Kompilierung die richtige Technik, mit der der einzelne Hauptquellcode für mehrere Editionen auf der Grundlage der für sie definierten Symbole verwaltet wird.
Folgende Regeln müssen bei der Verwendung eines bedingten Attributs beachtet werden:
- Eine bedingte Methode in einer Klassen- oder Strukturdeklaration muss den Rückgabetyp void haben.
- Wenn mehrere Bezeichner als bedingte Attribute verwendet werden, basiert die Einbeziehung von Methoden auf dem Ergebnis von logischem ODER oder logischem UND für die definierten Symbole.
- Es kann nicht für eine Methode in einer Schnittstellendeklaration angegeben werden.
- Einer bedingten Methode kann das Schlüsselwort "override" nicht vorangestellt werden, sie kann jedoch virtuell sein. Wenn es überschrieben wird, wird es implizit als eine Bedingung betrachtet.
- Symbole, die für die bedingte Kompilierung in Betracht gezogen werden, können als Compiler-Befehlszeilenoptionen oder als Umgebungsvariablen aus der OS-Shell oder als Pragmas (mithilfe der Präprozessor-Direktive "#define") im Quellcode definiert werden.
- Im Gegensatz zu C ++ kann die Definition von Symbolen in C # in beliebiger Reihenfolge erfolgen. Daher muss die Reihenfolge zwischen "#define" und einer bedingten Methode ordnungsgemäß festgelegt werden.
Obwohl die Verwendung von "#if" und "#endif" eine alternative Option zum bedingten Attribut darstellt, bietet letzteres einen saubereren, eleganteren und weniger fehleranfälligen Ansatz im Vergleich zu ersteren. Intern besteht der Unterschied darin, dass bei Verwendung eines bedingten Attributs für eine Methode die Methode weiterhin Teil der Assembly ist und nicht geladen wird. Im Fall von #if / #endif ist die Methode jedoch in der Assembly selbst nicht sichtbar.
Diese Definition wurde im Kontext von C # geschrieben.