Ho giocato con i contratti di codice su VS2008 (http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx).
Sono sicuramente gentili e forniscono una valida alternativa ai controlli if-then-throw nei metodi.Contratti di codice in .NET 4.0, nessuna gioia per i fan dei tipi di riferimento non annullabili?
Tuttavia spero che possano soddisfare il bisogno che sento fortemente per i tipi di riferimento non annullabili.
Purtroppo, da quello che ho potuto vedere questo non sembra essere il caso.
Questo è quello che ho capito:
Qualcosa di simile sarà ancora causare problemi in fase di esecuzione:
MyClass a = null;
a.ToString();devo ancora scrivere in modo esplicito controlli, anche se in modo più conciso e snello .
A meno che non si usi VS Team System, è possibile utilizzare solo i contratti di codice per controllare le cose in fase di esecuzione, senza vantaggi in fase di compilazione.
Significa che devi ancora gestire le cose quando qualcosa va storto.
Non molto diverso dalla gestione di una semplice eccezione.Anche con l'analisi statica VSTS non è buono come quello eseguito in fase di esecuzione.
Questo è perfettamente comprensibile, tuttavia è un altro segno che questa funzione è pensata per l'utilizzo in runtime.
favore correggetemi se sbaglio, ma da quello che vedo non c'è modo Code Contracts può rendere la vita più facile, e miei programmi più robusto, come i tipi di riferimento non annullabili avrebbe fatto.
Non fraintendetemi, non mi piacciono i contratti di codice.
Sono un ottimo miglioramento dell'intero framework.
È solo che se questo non colma il vuoto che C# lascia non avendo tipi di riferimento non annullabili, a questo punto temo che non lo farà nulla.
Cosa ne pensi?
Bene ... c'è ora (2017) un prototipo per giocare con il tipo di riferimento * Nullable *. Vedere [la mia risposta sotto] (https://stackoverflow.com/a/47339130/6309) – VonC