IMHO, da öffentliche Methoden mit Parametern von jedem anderen Programmierer aufgerufen werden können, ist es verantwortlich, Parameterwerte zu überprüfen und sinnvolle ArgumentException
zu werfen, sollte einer von ihnen ungültig sein. Warum sollte ich Code Contracts in öffentlichen Methoden verwenden?
Dass gesagt wird, warum würde ich es vorziehen, diese:
public void Toto(string parameter)
{
Contract.Requires(parameter != null);
//...
}
... über das?
public void Toto(string parameter)
{
if (parameter == null)
throw new ArgumentNullException(nameof(parameter));
//...
}
Im ersten Szenario muss Runtime-Vertrag Prüfung aktiviert sein, damit die Ausnahme ausgelöst werden. Wie wir wissen, wird diese Option wahrscheinlich für die Erstellung von Releases deaktiviert, was bedeutet, dass die Parameterüberprüfung nicht stattfindet. Für eine öffentliche Methode, die von jedem verwendet werden soll, den Sie als Teil eines freigegebenen Produkts kennen oder nicht kennen, scheint dies eine schlechte Idee zu sein.
Und selbst wenn die Laufzeitprüfung für Release-Builds aktiviert ist, wird die Ausnahme, die zurückgeworfen wird, nicht die sein, die ein typischer .NET-Entwickler erwarten würde (ArgumentNullException
in diesem Fall).
Also was fehlt mir? Warum sollte ich Code Contracts über das "traditionelle" if-throw-Muster setzen?
möglich Duplikat [Werfen einer Ausnahme vs Contract.Requires?] (Http://stackoverflow.com/questions/14991647/throwing-an-exception-vs-contract-requirest) –