मैं स्कूल के उद्देश्यों के लिए अपने स्वयं के ऐरेलिस्ट को कार्यान्वित कर रहा हूं, लेकिन चीजों को मसाला देने के लिए मैं सी # 4.0 कोड अनुबंधों का उपयोग करने की कोशिश कर रहा हूं। जब तक मुझे रचनाकारों को अनुबंध जोड़ने की ज़रूरत नहीं थी तब तक सब ठीक थे। क्या मुझे खाली पैरामीटर कन्स्ट्रक्टर में Contract.Ensures() जोड़ना चाहिए?अनुबंध और रचनाकारों द्वारा डिजाइन
public ArrayList(int capacity) {
Contract.Requires(capacity > 0);
Contract.Ensures(Size == capacity);
_array = new T[capacity];
}
public ArrayList() : this(32) {
Contract.Ensures(Size == 32);
}
मैं हाँ कहूंगा, प्रत्येक विधि में एक अच्छी तरह से परिभाषित अनुबंध होना चाहिए। दूसरी तरफ, अगर यह सिर्फ "मुख्य" कन्स्ट्रक्टर को काम सौंप रहा है तो इसे क्यों रखा जाए? तर्कसंगत रूप से, मुझे इसकी आवश्यकता नहीं होगी।
एकमात्र बिंदु मैं देखता हूं कि यह दोनों रचनाकारों में अनुबंध को स्पष्ट रूप से परिभाषित करने के लिए उपयोगी होगा, अगर भविष्य में हमारे पास अनुबंधों के लिए इंटेलिसेंस समर्थन है। क्या ऐसा होगा, यह स्पष्ट होना उपयोगी होगा कि प्रत्येक विधि के कौन से अनुबंध हैं, जैसा कि इंटेलिसेंस में दिखाई देगा।
इसके अलावा, क्या ऐसी कोई किताबें हैं जो अनुबंधों द्वारा डिजाइन के सिद्धांतों और उपयोग पर थोड़ा गहराई से जाती हैं? एक बात यह है कि एक भाषा में अनुबंधों का उपयोग कैसे करें (सी #, इस मामले में) के सिंटैक्स का ज्ञान है, अन्य यह जान रहा है कि इसका उपयोग कैसे और कब किया जाए। मैंने इसके बारे में गहराई लेख में कई ट्यूटोरियल और जॉन स्कीट के सी # को पढ़ा, लेकिन यदि संभव हो तो मैं थोड़ा गहरा जाना चाहूंगा।
धन्यवाद
संबंधित: http://stackoverflow.com/questions/2539497/code-contracts-do-we-have-to-specify-contract-requires-statements-redundant/2626997 – porges
आप "अनुबंध" से छुटकारा पा सकते हैं। आवश्यक (क्षमता> 0); " यदि आप एक इंट के विरोध में एक यूंट लेते हैं। मैं अंतिम उपाय के रूप में अनुबंधों का उपयोग करने की कोशिश करता हूं, जहां भाषा आपके डेवलपर को यह जानने की क्षमता को सीमित करती है कि जब आप कोड को पहली जगह बनाते थे तो आप क्या सोच रहे थे। यदि आप अनुबंध रखने का फैसला करते हैं, तो मैं "अनुबंध। लिखता हूं (क्षमता> = 0);" क्योंकि हमेशा एक खाली डेटा संरचना बनाने में सक्षम होना चाहिए, और उसके बाद ऑब्जेक्ट्स को बाद में जोड़ने का विकल्प होना चाहिए। –
"... भविष्य में हमारे पास अनुबंधों के लिए इंटेलिसेंस समर्थन है।" भविष्य अब यह है कि! http://visualstudiogallery.msdn.microsoft।कॉम/1ec7db13-3363-46c9-851f-1ce455f66970 –