Ho intenzione di utilizzare la nuova funzionalità .NET 4 Contratti di codice per lo sviluppo futuro. Questo mi ha fatto chiedere se dobbiamo specificare equivalenti dichiarazioni Contract.Requires(...)
in una catena di metodi ridondante.Contratti di codice: è necessario specificare le dichiarazioni di Contract.Requires (...) in modo ridondante nei metodi di delega?
Credo che un esempio di codice vale più di mille parole:
public bool CrushGodzilla(string weapon, int velocity)
{
Contract.Requires(weapon != null);
// long code
return false;
}
public bool CrushGodzilla(string weapon)
{
Contract.Requires(weapon != null); // specify contract requirement here
// as well???
return this.CrushGodzilla(weapon, int.MaxValue);
}
per la verifica runtime non importa molto, come avremo modo di fine sempre colpito il controllo requisito, e noi ci metteremo un errore se fallisce.
Tuttavia, è considerato una cattiva pratica quando non si specifica nuovamente il requisito del contratto nel secondo sovraccarico?
Inoltre, ci sarà la caratteristica di momento della compilazione controllo, ed eventualmente anche fase di progettazione il controllo dei contratti di codice. Sembra che non sia ancora disponibile per C# in Visual Studio 2010, ma penso che ci siano alcune lingue come SpeC# che già fanno. Questi motori probabilmente ci daranno suggerimenti quando scriviamo il codice per chiamare un tale metodo e il nostro argomento al momento può essere o sarà null
.
Quindi mi chiedo se questi motori analizzeranno sempre uno stack di chiamate finché non troveranno un metodo con un contratto che al momento non è soddisfatto?
Inoltre, here I learned about the difference between Contract.Requires(...)
and Contract.Assume(...)
. Suppongo che la differenza sia anche quella di considerare nel contesto di questa domanda?
Anche Mr FxCop mi avverte che anche i parametri opzionali sono cattivi. ;-) ... – herzmeister
Perché i parametri opzionali sono malvagi? –
@devoured elysium - Vedi http://www.grumpydev.com/2010/04/19/optional-parameters-in-c4-c3-and-vb-net-with-a-side-order-of-il- quirks/e Jon Skeet's http://csharpindepth.com/Articles/General/Overloading.aspx – Maslow