2017-12-26 5 views
0

Gibt es in C# eine Möglichkeit, Code zu erkennen, wenn der aktuell ausgeführte Code im aktivierten oder deaktivierten Modus ausgeführt wird?Ermitteln, ob Sie aktiviert oder deaktiviert sind

Zum Beispiel - wenn Sie eine Methode in einer Bibliothek haben, die von anderen verwendet werden soll, und Sie entscheiden möchten, ob eine arithmetische Operation, die Sie für einen benutzerdefinierten Datentyp durchführen, überläuft oder nicht.

Antwort

5

Ob eine bestimmte Methode überprüfte oder ungeprüfte Operatoren verwendet, hat nichts mit den Anrufern zu tun. Zur Kompilierungszeit ist es statisch bekannt. Es gibt keine Möglichkeit, es dynamisch zu überprüfen, da es keinen Bedarf oder Punkt gibt, es kann nicht dynamisch geändert werden.

Solange Sie Ihre Bibliothek mit der gewünschten aktivierten/deaktivierten Einstellung kompilieren oder die aktivierten/deaktivierten Blöcke in Ihrem Code verwenden, wie Sie möchten, ist Ihr Code in Ordnung und es gibt keinen Weg für irgendeinen Aufrufer Ihrer Bibliothek, um die von Ihnen verwendeten Operatoren zu ändern.

Wenn Sie Verbraucher Ihrer Bibliothek wollen der Lage sein, zu bestimmen, ob Sie überprüft, verwenden oder unkontrollierte Operationen, dann müssen Sie gehen auf mehrere Methoden (ein überprüft und eine nicht markiert), verteilen zwei Versionen des bereitzustellen Projekt, eines kompiliert als unchecked und eines überprüft, oder etwas in dieser Richtung. Es gibt keine Möglichkeit, den Code zu ändern, an den die arithmetischen Operatoren zur Laufzeit gebunden sind.

0

Sie könnten eine Überlaufoperation in einem try ... catch ausführen und sehen, wenn Sie eine Ausnahme erhalten, aber das ist wahrscheinlich sehr langsam. Die C# -Sprachspezifikation besagt auch, dass das Aktivieren/Deaktivieren einer Methode lokal ist und nicht das Ausführen von Aufrufen außerhalb der Methode.

Natürlich, wenn Sie versuchen, einen benutzerdefinierten numerischen Typ wie integrierte Arithmetik zu verhalten, ist das nicht sehr hilfreich.

Verwandte Themen