एक इंटरफ़ेस + एक्सटेंशन विधियां (मिश्रण) एक अमूर्त वर्ग के लिए बेहतर है?इंटरफ़ेस + एक्सटेंशन (मिश्रण) बनाम बेस क्लास
यदि आपका उत्तर "यह निर्भर करता है", तो यह किस पर निर्भर करता है?
मुझे इंटरफ़ेस + एक्सटेंशन दृष्टिकोण के दो संभावित फायदे दिखाई देते हैं।
- इंटरफेस विरासत में गुणा कर रहे हैं और कक्षाएं नहीं हैं।
- आप एक गैर-ब्रेकिंग तरीके से इंटरफेस बढ़ाने के लिए विस्तार विधियों का उपयोग कर सकते हैं। (आपके इंटरफ़ेस को लागू करने वाले ग्राहक आपके नए आधार कार्यान्वयन को प्राप्त करेंगे लेकिन फिर भी इसे ओवरराइड करने में सक्षम होंगे।)
मैंने अभी तक इस दृष्टिकोण के नकारात्मक पक्ष के बारे में सोचा नहीं है। एक शानदार कारण हो सकता है कि इंटरफ़ेस + एक्सटेंशन दृष्टिकोण विफल हो जाएगा। इस विषय पर
दो मददगार लेख हैं
- Create Mixins with Interfaces and Extension Methods
- Abstract Base Classes Have Versioning Problems Too
मुझे अभी तक इसके लिए एक निश्चित उत्तर नहीं दिखाई देता है। अब तक, मेरा मानना है कि जॉन की प्रतिक्रिया सबसे उपयोगी है, लेकिन स्टीफन स्टीनेगर के जवाब को भी पढ़ना सुनिश्चित करें। वे दोनों महत्वपूर्ण बिंदु बनाते हैं जिन्हें विधि चुनने से पहले माना जाना चाहिए। मेरी समझ अब है "विधियों को ओवरराइड करने के लिए विरासत का उपयोग करने की आवश्यकता है? एक सार आधार का उपयोग करें। अन्यथा इंटरफ़ेस + एक्सटेंशन का उपयोग करें।" – dss539