I contratti di codice funzionano benissimo finché non è necessario aggiungere un miliardo di Contract.Assume(...)
per i risultati che escono dal codice quadro. Ad esempio, MemoryStream.ToArray()
non restituisce mai un array nullo, come meglio posso dire dall'osservarlo in Reflector, ma non è documentato come un contratto, quindi devo spostarlo dappertutto su Assume
.Come è possibile specificare i contratti di codice per il codice del framework esistente (BCL)?
Esiste un modo magico per creare una biblioteca di contratti per funzioni già esistenti? Immagino che una volta che alcune dozzine delle funzioni di framework più comunemente utilizzate siano state ridotte, gli avvertimenti sarebbero diventati molto più appetibili.
"mai restituisce un array nullo" * oggi, * in ogni caso. Una delle cose su un contratto è che non dovresti cambiarlo. L'assenza di tale contratto * potrebbe * suggerire che * potrebbe * cambiare. Può essere. –
un punto equo, ma nel caso di contratti di codice, ho il sospetto che sia perché il team di contratti non ha avuto il tempo di aggiungere contratti ovunque. Vedi http://social.msdn.microsoft.com/Forums/en-NZ/codecontracts/thread/d8e2c2ad-de37-42ef-a854-02052d821975, dove uno dei membri del team dice "Stiamo lavorando per colmare le lacune più velocemente come possiamo, ma è principalmente guidato da noi o si trovano dove sono lacune importanti. Idealmente, andremmo sistematicamente attraverso le biblioteche e annotare loro. Al momento non abbiamo il potere dell'uomo. " –