यह संभव नहीं है, क्यों?
सी # में, यह आपको मजबूर करता है कि यदि आप सार्वजनिक तरीकों का उत्तराधिकारी हैं, तो आपको उन्हें सार्वजनिक करना होगा। अन्यथा वे उम्मीद करते हैं कि आप कक्षा से पहले स्थान पर न आएं।
एक रिश्ते का उपयोग करने के बजाय, आपको एक रिश्ते का उपयोग करना होगा।
भाषा डिजाइनर इस उद्देश्य को अनुमति नहीं देते हैं ताकि आप विरासत का अधिक उचित उपयोग कर सकें।
उदाहरण के लिए कोई व्यक्ति कक्षा की इंजन से इसकी कार्यक्षमता प्राप्त करने के लिए गलती से एक क्लास कार को भ्रमित कर सकता है। लेकिन एक इंजन कार्यक्षमता है जिसका उपयोग कार द्वारा किया जाता है। तो आप एक रिश्ते का उपयोग करना चाहते हैं। कार का उपयोगकर्ता इंजन के इंटरफ़ेस तक पहुंच नहीं लेना चाहता। और कार को इंजन के तरीकों को अपने आप से भ्रमित नहीं करना चाहिए। न ही कार का भविष्य व्युत्पन्न।
इसलिए वे इसे खराब विरासत पदानुक्रमों से बचाने के लिए अनुमति नहीं देते हैं।
इसके बजाय आपको क्या करना चाहिए?
इसके बजाय आपको इंटरफेस लागू करना चाहिए। इससे आपको रिश्ते का उपयोग करके कार्यक्षमता मिलती है।
अन्य भाषाओं:
C++ में आप बस एक आपरिवर्तक के आधार वर्ग से पहले निर्दिष्ट करते हैं, निजी सार्वजनिक या रक्षा की। यह उस आधार के सभी सदस्यों को बनाता है जो उस निर्दिष्ट पहुंच स्तर पर सार्वजनिक थे। यह मुझे मूर्खतापूर्ण लगता है कि आप सी # में ऐसा नहीं कर सकते हैं।
पुनर्गठन कोड:
दूसरों का सुझाव दिया है एक बनाने के लिए:
interface I
{
void C();
}
class BaseClass
{
public void A() { MessageBox.Show("A"); }
public void B() { MessageBox.Show("B"); }
}
class Derived : I
{
public void C()
{
b.A();
b.B();
}
private BaseClass b;
}
मैं ऊपर की कक्षाओं के नाम को समझने के लिए थोड़ा विवादास्पद :)
अन्य सुझाव दिए गए हैं() और बी() सार्वजनिक और अपवाद फेंक देते हैं। लेकिन यह लोगों के उपयोग के लिए एक दोस्ताना वर्ग नहीं बनाता है और यह वास्तव में समझ में नहीं आता है।
स्रोत
2008-09-19 23:56:51
के बजाय इंटरफ़ेस का उपयोग करता है अच्छी तरह से लिखित उत्तर। –
इंटरफेस निश्चित रूप से जाने का एक अनुशंसित तरीका है, लेकिन यह एकमात्र कदम नहीं होना चाहिए। आपको अभी भी पता होना चाहिए कि आपका कोड एकल उत्तरदायित्व सिद्धांत का उल्लंघन कर रहा है या नहीं। यहां तक कि इंटरफेस को लागू करने से आपको मोनोलिथिक कक्षाएं लिखने से रोका नहीं जाता है जो बड़े और अनावश्यक होते हैं। –
सार्वजनिक तरीकों को छिपाने का एक अन्य कारण यह है कि यह उपभोक्ताओं के साथ इंटरफेस अनुबंध तोड़ सकता है। उदाहरण के लिए, आईएलआईस्ट लागू करने वाली बेस क्लास से निकालें() विधि को छिपाने से इंटरफ़ेस के आधार पर मौजूद होने वाली विधि को किसी भी कोड को तोड़ दिया जाएगा। –