ContractArgumentValidatorAttribute Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Aktiviert die Verarbeitung von Legacy if-then-throw
-Code in separate Methoden zur Wiederverwendung und stellt die vollständige Kontrolle über ausgelösten Ausnahmen und Argumenten bereit.
public ref class ContractArgumentValidatorAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=false)]
[System.Diagnostics.Conditional("CONTRACTS_FULL")]
public sealed class ContractArgumentValidatorAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=false)>]
[<System.Diagnostics.Conditional("CONTRACTS_FULL")>]
type ContractArgumentValidatorAttribute = class
inherit Attribute
Public NotInheritable Class ContractArgumentValidatorAttribute
Inherits Attribute
- Vererbung
- Attribute
Hinweise
Wenn Ihr Code explizite Code zum Überprüfen von if-then-throw
Parametern verwendet, verwenden Sie möglicherweise Hilfsmethoden, die Überprüfungen ausführen und bestimmte Ausnahmen auf Fehler auslösen, wie im folgenden Beispiel gezeigt.
using System;
static class ValidationHelper
{
public static void NotNull(object argument, string parameterName)
{
if (argument == null) throw new ArgumentNullException(parameterName,
"The parameter cannot be null.");
}
}
public class Example
{
public void Execute(string value)
{
ValidationHelper.NotNull(value, "value");
// Body of method goes here.
}
}
Class ValidationHelper
Public Shared Sub NotNull(argument As Object, parameterName As String)
If argument Is Nothing Then
Throw New ArgumentNullException(parameterName,
"The parameter cannot be null.")
End If
End Sub
End Class
Module Example
Public Sub Execute(value As String)
ValidationHelper.NotNull(value, "value")
' Body of method goes here.
End Sub
End Module
In diesem Beispiel ist eine Wahlbedingung angegeben, die angibt, Execute
dass der Parameterwert nicht sein null
sollte. Um die Vertragstools zu aktivieren, um zu erkennen, dass der Aufruf ValidationHelper.NotNull
einen Vertrag darstellt, können Sie die aufgerufene Methode mit dem ContractArgumentValidatorAttribute Attribut markieren. Der Contract.EndContractBlock Methodenaufruf sollte verwendet werden, um die Tools zum Extrahieren der richtigen Spezifikationen für die Dokumentgenerierung und statische Überprüfung wie folgt zu ermöglichen.
using System;
using System.Diagnostics.Contracts;
static class ValidationHelper
{
[ContractArgumentValidator]
public static void NotNull(object argument, string parameterName)
{
if (argument == null) throw new ArgumentNullException(parameterName,
"The parameter cannot be null.");
Contract.EndContractBlock();
}
}
Imports System.Diagnostics.Contracts
Class ValidationHelper
<ContractArgumentValidator>
Public Shared Sub NotNull(argument As Object, parameterName As String)
If argument Is Nothing Then
Throw New ArgumentNullException(parameterName,
"The parameter cannot be null.")
Contract.EndContractBlock()
End If
End Sub
End Class
Zusätzlich zu if-then-throw
Anweisungen kann der Vertragsabschnitt der Vertrags validator-Methoden Aufrufe anderer Vertrags validator-Methoden enthalten. Allerdings sind keine anderen Verträge (z Contract.Requires. B. oder Contract.Ensures) zulässig. Code, der dem Contract.EndContractBlock Aufruf folgt, wird von allen Vertragstools ignoriert.
Das folgende Beispiel zeigt einen Bereichsargument-Validator, der in Bezug auf eine vorhandene NotNull
Validator-Methode geschrieben wurde.
using System;
using System.Diagnostics.Contracts;
static class ValidationHelper
{
[ContractArgumentValidator]
public static void NotNull(object argument, string parameterName)
{
if (argument == null) throw new ArgumentNullException(parameterName,
"The parameter cannot be null.");
Contract.EndContractBlock();
}
[ContractArgumentValidator]
public static void InRange(object[] array, int index, string arrayName, string indexName)
{
NotNull(array, arrayName);
if (index < 0)
throw new ArgumentOutOfRangeException(indexName,
"The index cannot be negative.");
if (index >= array.Length)
throw new ArgumentOutOfRangeException(indexName,
"The index is outside the bounds of the array.");
Contract.EndContractBlock();
}
}
public class Example
{
public void Execute(object[] data, int position)
{
ValidationHelper.InRange(data, position, "data", "position");
// Body of method goes here.
}
}
Imports System.Diagnostics.Contracts
Class ValidationHelper
<ContractArgumentValidator>
Public Shared Sub NotNull(argument As Object, parameterName As String)
If argument Is Nothing Then
Throw New ArgumentNullException(parameterName,
"The parameter cannot be null.")
Contract.EndContractBlock()
End If
End Sub
<ContractArgumentValidator>
Public Shared Sub InRange(array() As Object, index As Integer,
arrayName As String, indexName As String)
NotNull(array, arrayName)
If index < 0 Then
Throw New ArgumentOutOfRangeException(indexName,
"The index cannot be negative.")
End If
If index >= array.Length Then
Throw New ArgumentOutOfRangeException(indexName,
"The index is outside the bounds of the array.")
End If
Contract.EndContractBlock()
End Sub
End Class
Module Example
Public Sub Execute(data() As Object, position As Integer)
ValidationHelper.InRange(data, position, "data", "position")
' Body of method goes here.
End Sub
End Module
Aus der Sicht der Spezifikation weist die Execute
Methode die folgenden drei Verträge auf:
Contract.Requires<ArgumentNullException>(data != null);
Contract.Requires<ArgumentOutOfRangeException>(position >= 0);
Contract.Requires<ArgumentOutOfRangeException>(position < data.Length);
In Standardmethoden können Aufrufe von Vertrags-Validator-Methoden frei mit anderen Verträgen Contract.Ensures wie z. B. oder Contract.Requires.
Konstruktoren
ContractArgumentValidatorAttribute() |
Initialisiert eine neue Instanz der ContractArgumentValidatorAttribute-Klasse. |
Eigenschaften
TypeId |
Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab. (Geerbt von Attribute) |
Methoden
Equals(Object) |
Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist. (Geerbt von Attribute) |
GetHashCode() |
Gibt den Hashcode für diese Instanz zurück. (Geerbt von Attribute) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
IsDefaultAttribute() |
Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist. (Geerbt von Attribute) |
Match(Object) |
Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht. (Geerbt von Attribute) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Geerbt von Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können. (Geerbt von Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Geerbt von Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Geerbt von Attribute) |