सबसे अच्छा जवाब इस वर्ग के लिए उपयोग के मामले और पर्यावरण के आधार पर निर्भर करेगा। एक ऐप या फ्रेमवर्क विकसित करने वाली टीम के हिस्से के रूप में, उस टीम द्वारा उपयोग किए जाने वाले डिज़ाइन पैटर्न को अपनाने के लिए 'सही' समाधान की तलाश करना बेहतर होता है, क्योंकि इससे दूसरों के लिए अपना कोड अपनाना और बनाए रखना आसान हो जाएगा।
आप इन वर्गों का उपयोग और विस्तार करने की अपेक्षा कैसे करते हैं, यह भी महत्वपूर्ण है। क्या आप भविष्य में 'स्क्वायर' को चलने की आवश्यकता होगी?क्या एक आकार की गतिशीलता हमेशा स्थैतिक है, या यह गतिशील विशेषता के रूप में अधिक उपयोगी हो सकती है? क्या मूव() के पास कक्षाओं के लिए कोई मूल्य है जो आकार नहीं हैं? जंगमता एक गतिशील विशेषता के रूप में उपयोगी हो सकता है, तो यह विचार करें:
public abstract class Shape
{
public bool isMovable()
{
return false;
}
public virtual void Move()
{
if (!isMovable() {
throw new NotSupportedException();
} else {
throw new BadSubclassException();
}
}
}
आपका उपवर्गों तो या तो स्थिर या गतिशील व्यवहार प्रदान करने के लिए isMovable ओवरराइड कर सकते हैं, और आगे संशोधित किया जा सकता या समय के साथ subclassed, इतने लंबे समय के अपने दस्तावेज़ में आता है के रूप में स्पष्ट करें कि चलने योग्य को हमेशा कॉल करने के लिए कॉल से पहले होना चाहिए। डिफ़ॉल्ट व्यवहार उन लोगों की अपेक्षाओं पर आधारित होना चाहिए जिन्हें आप अपने कोड का उपयोग करने की अपेक्षा करते हैं, इस आधार पर कि उन्होंने संबंधित डिज़ाइन पैटर्न कैसे कार्यान्वित किए हैं।
इन निर्णयों को बनाने की चुनौती का एक अच्छा उदाहरण विभिन्न ढांचे में संग्रह वर्गों की उत्परिवर्तन विकसित करने के इतिहास को देखकर पाया जा सकता है। वहां ऐसे डिज़ाइन किए गए हैं जहां म्यूटेबल क्लासेस (सेट, एरे, डिक्शनरी इत्यादि) बेस क्लास रहे हैं, जिसमें सबक्लास में लागू अपरिवर्तनीयता के साथ-साथ रिवर्स भी शामिल है। दोनों दृष्टिकोणों के साथ-साथ एक गतिशील दृष्टिकोण के लिए वैध तर्क हैं, लेकिन ढांचे के उपयोगकर्ता के लिए सबसे महत्वपूर्ण कारक स्थिरता, क्योंकि सही क्या है वास्तव में उपयोग करने के लिए सबसे आसान क्या है, सुरक्षा प्रदान करना और प्रदर्शन समझौता नहीं किया गया है।
स्रोत
2012-10-01 17:47:18
यह। प्रश्न का उत्तर "मैं कुछ आधार व्यवहार को कैसे प्राप्त नहीं कर सकता" हमेशा "पहले स्थान पर इसका उत्तराधिकारी नहीं है"। – KeithS
@ किथ्स, यह सही है। विरासत को रोकना विरासत को देखने का एक विपरीत तरीका है। तो, उम्मीद है कि इससे ओपी को दूसरी तरफ आगे बढ़ने में मदद मिलेगी। :) –
@ माइक, 'IMovable' के बारे में कैसे? – smartcaveman