2015-10-27 5 views
7

Sto utilizzando l'estensione Microsoft Code Contracts con C#. Quando scrivo una classe con un'implementazione ToString override che restituisce null, si identifica correttamente il problema:In che modo i Contratti di codice sanno che le sostituzioni di ToString non devono restituire nulla?

CodeContracts string cannot be null

Ho assunto questo era perché Microsoft utilizza contratti di codice interno, e hanno aggiunto una chiamata Contract.Ensures-Object.ToString. Tuttavia, quando guardo il Object.ToString source code non vedo alcun contratto (vedo altri contratti, ma non quello che sto cercando). In che modo i Contratti di codice determinano che ToString non deve restituire nulla?

risposta

6

Questa è la definizione interna Contratti di codice di System.Object: (link). Come si può vedere, che hanno definito ToString() con questo vincolo:

Contract.Ensures(Contract.Result<string>() != null); 

Per rispondere alla tua domanda, Code Contracts sa che non è nulla a causa di una definizione di contratto di interno.

+0

Per fornire ulteriori informazioni: I Contratti di codice non sono negli assembly ufficiali, pertanto non li si vede su referencesource.microsoft.com. Il team dei Contratti di codice ha definito tutti gli stessi Contratti di codice e li ha forniti in gruppi di riferimento del contratto separati, che contengono solo contratti e non una vera fonte. – cremor

+0

@cremor Grazie! Proprio per la cronaca, vedo molti contratti su ReferenceSource (ad es. In [Object.cs] (http://referencesource.microsoft.com/#mscorlib/system/object.cs.180) ma suppongo che i contratti potrebbero essere specificato in .NET core o in Contratti di codice, a seconda di chi li ha scritti. – Will

Problemi correlati