मैं एमएस कोड अनुबंध का उपयोग कर रहा हूं और इंटरफेस विरासत और ContractClassFor विशेषताओं का उपयोग कर एक झटके में भाग गया है।कोड अनुबंध: विरासत वाले इंटरफेस से कैसे निपटें?
इन इंटरफेस और अनुबंध वर्गों को देखते हुए:
[ContractClass(typeof(IOneContract))]
interface IOne { }
[ContractClass(typeof(ITwoContract))]
interface ITwo : IOne { }
[ContractClassFor(typeof(IOne))]
abstract class IOneContract : IOne { }
[ContractClassFor(typeof(ITwo))]
abstract class ITwoContract : IOneContract, ITwo { }
मान लें कि Ione और ITwo पर्याप्त इंटरफ़ेस हैं करते हैं। तो आवश्यक जांच के लिए IOneContract में इसमें पर्याप्त मात्रा में कोड होगा।
मैं आईओएन इंटरफेस के लिए ITwoContract में उन सभी को डुप्लिकेट नहीं करना चाहता हूं। मैं केवल आईटीवो इंटरफेस के लिए नए अनुबंध जोड़ना चाहता हूं। एक अनुबंध वर्ग को दूसरे से लेना उस कोड का पुन: उपयोग करने का संभावित तरीका लगता है। फिर भी मुझे निम्न त्रुटि मिलती है:
EXEC : warning CC1066: Class 'ITwoContract' is annotated as being the contract for the interface 'ITwo' and cannot have an explicit base class other than System.Object.
क्या यह कोड अनुबंधों में एक सीमा है या क्या मैं इसे गलत कर रहा हूं? हमारे पास हमारे प्रोजेक्ट में बहुत अधिक इंटरफ़ेस विरासत है और यह कोड अनुबंधों के लिए एक सौदा ब्रेकर जैसा लगता है अगर मैं इस मुद्दे के आसपास काम करने का तरीका नहीं समझ सकता।
आह! "और आप सभी विरासत में आईओएन विधियों को अमूर्त के रूप में घोषित कर सकते हैं" बिट वह महत्वपूर्ण हिस्सा था जिसे मैं याद कर रहा था। धन्यवाद। – scobi
समस्या यह है कि आपको अभी भी सार अनुबंध अनुबंध ITOContract में सभी IOne विधियों को निर्दिष्ट करना होगा। यदि IOne ने 50 तरीकों से कहा है, तो मुझे उन सभी इंटरफ़ेस के लिए दोहराना होगा जो IOne से प्राप्त होते हैं - गहराई से थकाऊ, और IOne में परिवर्तन करता है। – Rob
यदि आपके पास 50 विधियों के साथ एक इंटरफ़ेस है तो आपको शायद उस इंटरफ़ेस से जुड़े प्रत्येक परिवर्तन को कठिन और कठिन लगेगा क्योंकि आप एकल जिम्मेदारी सिद्धांत का उल्लंघन करेंगे। –