निजी इंटरफ़ेस विरासत
ऐतिहासिक रूप से, भाषाओं निजी वंशानुक्रम की अनुमति दी है। सी ++ में, आप उस प्रकार के साथ बहुरूप रूप से संगत होने के बिना किसी प्रकार से प्राप्त कर सकते हैं। यह कार्यान्वयन का पुन: उपयोग करने का एक सुविधाजनक तरीका है। सीटीएस में, आप निजी कार्यान्वयन विरासत नहीं कर सकते हैं। लेकिन आप निजी इंटरफेस विरासत का उपयोग कर सकते हैं।
निजी इंटरफ़ेस विरासत वास्तव में किसी प्रकार के सार्वजनिक API से विधियों को छिपाने का एक तरीका है। वे निजी तरीकों से संकलित हैं लेकिन वास्तव में एक प्रकार के इंटरफ़ेस मानचित्र के माध्यम से सुलभ हैं। दूसरे शब्दों में, उन्हें केवल उस इंटरफ़ेस के रूप में टाइप किए गए संदर्भ के माध्यम से बुलाया जा सकता है जिस पर विधि परिभाषित की गई है। एक उदाहरण इस समझने में अधिक आसान कर देगा: इस मामले में
class PrivateImplementer : IFoo
{
void IFoo.Foo()
{
Console.WriteLine("PrivateImplementer::IFoo.Foo");
}
}
, PrivateImplementer
सार्वजनिक रूप से IFoo
लागू करने के लिए जाना जाता है। इस प्रकार, IFoo
के उदाहरण के रूप में एक उदाहरण को बहुरूप रूप से माना जा सकता है। लेकिन आप वास्तव में उस पर फू को कॉल नहीं कर सकते हैं जब तक कि आप इसे IFoo
के रूप में नहीं मानते। यह कोड यह दर्शाता है:
PrivateImplementer p = new PrivateImplementer();
p.Foo(); // This line will fail to compile
IFoo f = p;
f.Foo();
आप निजी रूप से कार्यान्वित करने के लिए इंटरफ़ेस के अलग-अलग तरीकों का चयन कर सकते हैं। उदाहरण के लिए, यदि PrivateImplementer
IFooBar
लागू किया गया है, तो यह निजी रूप से Foo को लागू करने का विकल्प चुन सकता है, लेकिन बार सामान्य रूप से सामान्य वाक्यविन्यास का उपयोग कर बार चुन सकता है।
प्रैक्टिस में, ऐसे कई सामान्य मामले नहीं हैं जहां आप निजी कार्यान्वयन का उपयोग करेंगे। System.Collections.Generic
लाइब्रेरी सभी विरासत प्रणाली को गुप्त रूप से कार्यान्वित करने के लिए इस दृष्टिकोण का उपयोग करती है। चयन कमजोर टाइप किए गए इंटरफेस। यह पीछे की संगतता "बस काम करता है" उदाहरण के लिए List<T>
का एक उदाहरण है जो IList
अपेक्षा करता है कि ठीक काम करेगा। इस विशिष्ट उदाहरण में, नए प्रकार के एपीआई को अव्यवस्थित करना एक दयालुता होगी (कमजोर टाइप की गई इंटरऑपरेबिलिटी के लिए आवश्यक कुछ विधियां हैं)।
"नहीं," एक बहुत ही खराब जवाब है यदि वह यह जानना चाहता था कि आप क्या जानते थे। किसी ऐसे व्यक्ति की तरह लगता है जो सिर्फ यह दिखाना चाहता है कि उन्हें कितना पता है।
हालांकि यह सच है, क्या यह इंटरफेस के सबसे बेकार उपयोगों में से एक नहीं होगा? मैं नहीं देख सकता कि आप कभी भी इस तरह के निर्माण का उपयोग क्यों करेंगे। – Razzie
उस के लिए उपयोग के मामले के बारे में सोचने के लिए संघर्ष कर रहा है, या कम से कम एक उपयोग केस जिसमें भगवान वर्ग – annakata
भी शामिल नहीं है, यही वह सवाल है जिसे मैंने अर्थ के रूप में व्याख्या किया, इस मामले में यह सिर्फ एक मूर्ख सवाल था साक्षात्कारकर्ता ने पूछा! – RichardOD