2015-10-27 28 views
7

Microsoft'un Code Contracts uzantısını C# ile kullanıyorum. Ben null döndürür geçersiz kılınmış bir ToString uygulaması ile bir sınıf yazarken, doğru konuyu tanımlar:Kod Sözleşmeleri, ToString geçersiz kılmaları geçersiz kılmaması gerektiğini nasıl biliyor?

CodeContracts string cannot be null

Microsoft dahili Kod Sözleşmeler kullandığı için bu olduğunu düşünmüştüm ve onlar Object.ToString bir Contract.Ensures çağrısı ekledi. Ancak, Object.ToString source code'a baktığımda herhangi bir sözleşme görmüyorum (diğer sözleşmeleri görüyorum, ama aradığım şey değil). Kod Sözleşmeleri, ToString'in null değerini döndürmemesi gerektiğini nasıl belirler?

cevap

6

Bu Kural Sözleşmeleri, System.Object iç tanımının: (link). Gördüğünüz gibi, bu kısıtlama ile ToString() tanımladığınız:

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

sorunuza gelince, Kod Sözleşmeler nedeniyle iç sözleşme tanımının boş olmadığını biliyor.

+0

Biraz daha fazla bilgi sağlamak için: Kod Sözleşmeleri resmi meclislerde bulunmaz, bu nedenle bunları sourcesource.microsoft.com adresinde göremezsiniz. Kural Sözleşmeleri ekibi tüm Kod Sözleşmelerini kendileri tanımlamış ve yalnızca sözleşmeleri içeren ve gerçek kaynağı olmayan, ayrı sözleşme referans meclislerinde sağlanmıştır. – cremor

+0

@cremor Teşekkürler! Sadece FYI, ReferenceSource üzerinde çok sayıda sözleşme görüyorum (örneğin [Object.cs] (http://referencesource.microsoft.com/#mscorlib/system/object.cs,180)) ancak sözleşmelerin bunları kimin yazdığına bağlı olarak .NET çekirdeğinde veya Kod Sözleşmelerinde belirtilmelidir. – Will