AFAIK, यह सच में कोई फर्क नहीं पड़ता कि आप IList<T>
रूप में घोषित किया:
public interface IList<T> : ICollection<T>, IEnumerable<T> { ... }
या बस के रूप में:
public interface IList<T> : ICollection<T> { ... }
किसी भी वर्ग को लागू करना होगा IList<T>
को लागू करना चाहता है कि सभी इन इंटरफेसों, यानी विरासत में भी।
जाहिर है, अगर आपने GetEnumerator
IEnumerable
/IEnumerable<T>
इंटरफेस के तरीकों को लागू किए बिना इस इंटरफेस को लागू किया है, तो आपको एक कंपाइलर त्रुटि मिल जाएगी; प्रदर्शन द्वारा यह "सबूत" आपको यह बताने के लिए पर्याप्त होना चाहिए कि "इंटरफ़ेस विरासत" वास्तव में संक्रमणीय है।
Sidenote 1. एक तरफ ध्यान दें पर (और थोड़ा विषय से हटकर), विचार है कि आप भी कर सकते हैं:
class Base
{
public void Foo() { ... }
}
interface IFoo
{
void Foo();
}
class Derived : Base, IFoo
{ }
Derived
वास्तव में IFoo
को लागू नहीं करता है; इसकी बेस क्लास Base
विधि Foo
प्रदान करती है, लेकिन यह स्पष्ट रूप से IFoo
को लागू नहीं करती है।
यह अच्छी तरह से संकलित करता है, ऐसा लगता है क्योंकि इंटरफेस द्वारा आवश्यक सभी विधियां हैं। (मैं इसे छोड़ दूंगा और अब के लिए सटीक तकनीकी बात छोड़ दूंगा।)
कारण यह है कि मैं इस असंभव असंबंधित घटना का उल्लेख कर रहा हूं कि मुझे इस तरह से इंटरफ़ेस विरासत के बारे में सोचना पसंद है: आपको इसकी आवश्यकता है कक्षा घोषणा में निर्दिष्ट इंटरफेस द्वारा आवश्यक सभी विधियों को लागू करें। तो जब मैं
interface ICollection<T> : IEnumerable<T> { ... }
बजाय कह रही है की
, देख "ICollection<T>
विरासत IEnumerable<T>
", मैं कह सकता है अपने आप को, "ICollection<T>
सभी को लागू करने वर्गों है कि वे IEnumerable<T>
लागू भी की आवश्यकता है।"
Sidenote 2। अभी तक एक और कुछ हद तक संबंधित किस्सा साथ इस जवाब निष्कर्ष करने के लिए (मैं वादा करता हूँ यह पिछले एक हो जाएगा):
कुछ समय पहले मैं चैनल 9. पर वीडियो Inside .NET Rx and IObservable
/IObserver
in the BCL देखा है कि तुम अब, उन दो नए इंटरफेस, आ सकते हैं Rx से, बीसीएल में .NET 4 के साथ पेश किया गया था। एक अनोखी बात यह है कि जब आप observable.Subscribe(observer)
के माध्यम से एक पर्यवेक्षक को पर्यवेक्षक की सदस्यता लेते हैं, तो आप वापस कुछ अज्ञात IDisposable
हैं। क्यूं कर?
टाल्क़र्ज़ है कि वीडियो में समझाते हैं, वे IDisposable
एक और वर्णनात्मक नाम (जैसे ISubscription
) दिया जा सकता था, एक प्रकार का नाम "उर्फ" के रूप में परिभाषित के माध्यम से इस प्रकार है:
interface ISubscription : IDisposable {}
हालांकि, वे अंत में इसके खिलाफ फैसला किया। उन्होंने पाया कि एक बार ISubscription
Subscribe
विधि से वापस आ गया है, यह अब स्पष्ट नहीं होगा कि लौटा हुआ मूल्य Dipose
डी होना चाहिए।
तो यह "इंटरफेस विरासत" का एक और मामूली समस्याग्रस्त पक्ष है जिसे किसी को ध्यान में रखना चाहिए।
आप में इस समान [सवाल] कुछ जवाब पा सकते हैं [1] [1]: http://stackoverflow.com/questions/1164757/why-arraylist-implement-ilist-icollection-ienumerable – DesignFirst
http://stackoverflow.com/questions/4754923/a-question-about-interface-inheritance-in-net/4755044#4755044 – explorer
यह http://stackoverflow.com/questions/4817369/why का डुप्लिकेट भी है -does-do-realy-list-implements-all-of-that-interfaces-not-just-ilistt/4818566 # 4818566 –