कोड संविदा इनपुट और कार्यों का उत्पादन पर चेकों प्रदर्शन का एक अपेक्षाकृत नया तरीका है। जहां वे आपके मानक Assert
से भिन्न होते हैं, टाइपिंग जांच यह है कि जेनरेटेड आईएल जो इनपुट की जांच करता है उसे फ़ंक्शन से पहले सीधे जांचता है, और कोड जो आउटपुट की जांच करता है, आपके फ़ंक्शन वास्तव में बाहर निकलने के बाद।
यह उपयोगी क्यों है?
ठीक है, यह आपके फ़ंक्शन को वापस आने के बाद चर को संशोधित करने से रोकता है, जिससे संभावित रूप से बग पेश हो जाते हैं।
यहां एक उदाहरण है।
public void doSomething(SomeObject foo)
{
Contract.Requires<ArgumentNullException>(foo != null);
}
अब, कोड अनुबंधों की आवश्यकता है कि उस चेक से पहले कोई कोड न हो। जेनरेटेड आईएल में, foo
का मान कॉल करने के लिए प्राथमिक परीक्षण किया जाता है। यह सुनिश्चित करने का एक निश्चित तरीका है कि आपका इनपुट अपेक्षित है।
दूसरा, Contract.Ensures
निर्माण है। यह मूल रूप से Requires
जैसा है लेकिन आपके वापसी मूल्य पर कार्य करता है।
public int doSomethingElse()
{
Contract.Ensures(Contract.Result<int>() != 0);
int ret = 1;
return ret;
}
यह अगर आप अपने समारोह से कई बाहर निकलने के रास्तों था विशेष रूप से उपयोगी हो सकता है ...
public int someBadFunction()
{
Contract.Ensures(Contract.Result<int>() != 0);
if(....)
{
if(....) return 2;
if(....) return 8;
}
return 3;
}
स्रोत
2011-12-09 16:49:42
धन्यवाद Rionmonster, तो यह उपयोगी था! –