2010-03-02 10 views

Antwort

14

würden Sie checked gegen einen (stumm) Überlauf in einem Ausdruck zu schützen verwenden.
Und verwenden Sie unchecked, wenn Sie wissen, dass ein harmloser Überlauf auftreten könnte.

Sie verwenden beide an Orten, an denen Sie nicht auf die standardmäßige (projektweite) Compilereinstellung angewiesen sind.

Beide Formen sind ziemlich selten, aber wenn man kritische Ganzzahlarithmetik durchführt, lohnt es sich, über einen möglichen Überlauf nachzudenken.

Beachten Sie auch, dass sie in zwei Formen vor:

x = unchecked(x + 1); // (expression) 
unchecked { x = x + 1;} // { statement(s) } 
3

Von The checked and unchecked operators

Die aktivierten und deaktivierten Betreiber werden verwendet, um den Überlauf zu steuern Kontrolle Kontext für Integral- Typ arithmetische Operationen und Konvertierungen.

In einem überprüften Zusammenhang, wenn ein Ausdruck einen Wert erzeugt, der außerhalb des Bereich des Zieltyp ist, das Ergebnis hängt davon ab, ob der Ausdruck konstant oder nicht konstant. Konstante Ausdrücke führen zu Kompilierungszeitfehlern, während nicht konstante Ausdrücke zur Laufzeit ausgewertet werden und Ausnahmen auslösen.

In einem ungeprüften Kontext, falls ein Ausdruck einen Wert erzeugt, die außerhalb des Bereichs des Ziel Typs ist, wird das Ergebnis abgeschnitten.

checked, unchecked

+1

OK, das sind sie. Könnten Sie näher ausführen, wann Sie es tun wollen? – NotMe

6

checked wird Ihnen helfen System.OverFlowException zu holen, die sonst unbemerkt bleiben wird

int result = checked (1000000 * 10000000); 
    // Error: operation > overflows at compile time 

int result = unchecked (1000000 * 10000000); 
    // No problems, compiles fine 
3

checked vs. unchecked ist auch nützlich bei der diese Zeiten, wenn Sie Ganzzahl Mathe tun. vor allem inkrementieren Operationen und Sie wissen, dass Sie über UInt32.MaxValue inkrementieren, und wollen es harmlos überlaufen zurück zu 0.

Verwandte Themen