मैं वर्तमान में C # को मास्टर करने की कोशिश में हूं, इसलिए मैं गैरी मैकलीन हॉल द्वारा C # के माध्यम से Adaptive Code पढ़ रहा हूं ।
वह पैटर्न और विरोधी पैटर्न के बारे में लिखते हैं। कार्यान्वयन बनाम इंटरफेस भाग में वह निम्नलिखित लिखते हैं:
डेवलपर्स जो इंटरफेस के लिए प्रोग्रामिंग की अवधारणा के लिए नए हैं, अक्सर इंटरफ़ेस के पीछे क्या है, यह बताने में कठिनाई होती है।
संकलन के समय, इंटरफ़ेस के किसी भी ग्राहक को यह पता नहीं होना चाहिए कि वह किस इंटरफ़ेस का उपयोग कर रहा है। ऐसा ज्ञान गलत धारणाओं को जन्म दे सकता है जो क्लाइंट को इंटरफ़ेस के एक विशिष्ट कार्यान्वयन के लिए जोड़े।
उस सामान्य उदाहरण की कल्पना करें जिसमें एक वर्ग को लगातार भंडारण में रिकॉर्ड बचाने की आवश्यकता होती है। ऐसा करने के लिए, यह सही ढंग से एक इंटरफ़ेस को दर्शाता है, जो उपयोग किए गए निरंतर भंडारण तंत्र के विवरण को छुपाता है। हालांकि, इस बारे में कोई भी धारणा बनाना सही नहीं होगा कि इंटरफ़ेस का कार्यान्वयन रन टाइम में किसके लिए किया जा रहा है। उदाहरण के लिए, किसी भी कार्यान्वयन के लिए इंटरफ़ेस संदर्भ को कास्टिंग करना हमेशा एक बुरा विचार है।
यह भाषा की बाधा हो सकती है, या मेरे अनुभव की कमी हो सकती है, लेकिन मुझे इसका मतलब समझ में नहीं आता है। यहाँ मैं समझता हूँ:
मेरे पास C # का अभ्यास करने के लिए एक निशुल्क मज़ा परियोजना है। वहाँ मेरा एक वर्ग है:
public class SomeClass...
इस वर्ग का उपयोग बहुत सारी जगहों पर किया जाता है। C # सीखने के दौरान, मैंने पढ़ा कि एक इंटरफ़ेस के साथ अमूर्त करना बेहतर है, इसलिए मैंने निम्नलिखित कार्य किया
public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have.
public class SomeClass : ISomeClass <- Same as before. All implementation here.
इसलिए मैं कुछ क्लास के सभी संदर्भों में चला गया और उनकी जगह ISomeClass ने ले ली।
निर्माण में छोड़कर, जहाँ मैंने लिखा था:
ISomeClass myClass = new SomeClass();
क्या मैं सही ढंग से समझ रहा हूं कि यह गलत है? यदि हाँ, तो क्यों, और मुझे इसके बजाय क्या करना चाहिए?
ISomeClass myClass = new SomeClass();
? यदि आप वास्तव में इसका मतलब है कि, कंस्ट्रक्टर में पुनरावृत्ति है, तो शायद आप जो चाहते हैं वह नहीं है। उम्मीद है कि आपका मतलब "निर्माण" अर्थात आवंटन में है, शायद, लेकिन खुद कंस्ट्रक्टर में नहीं। ?
ISomeClass
), लेकिन बहुत सामान्य इंटरफेस बनाना भी आसान है, जिसके लिए उपयोगी कोड लिखना असंभव है, जिसके लिए एकमात्र विकल्प है इंटरफ़ेस को फिर से जोड़ना और कोड को फिर से लिखना या डाउनकास्ट करना है।