Why ArrayList implement IList, ICollection, IEnumerable?

前端 未结 4 532
栀梦
栀梦 2020-12-20 11:59

ArrayList declares that it implements the IList, ICollection, and IEnumeralbe interfaces.

Why not only implement

相关标签:
4条回答
  • 2020-12-20 12:28

    I am not so sure that ArrayList has separate implementations of the interfaces. Consider the following code:

    public interface IBase
    {
        int SomeInt { get; set; }
    }
    
    public interface ISub : IBase
    {
        int SomeOther { get; set; }
    }
    
    public class MyClass : ISub
    {
        public int SomeOther { get; set; }
        public int SomeInt { get; set; }
    }
    

    The MyClass type implements only the ISub interface directly. However, if you compile the code into an assembly, and then add that assembly as reference in another project, open the Object Browser and examine the base types for MyClass, it will feature something like this:

    Base Types
     |- ISub
     |    |- IBase
     |- IBase
     |- Object
    
    0 讨论(0)
  • 2020-12-20 12:33
    1. IEnumerable - To support the foreach statement
    2. ICollection - To support add single or multiple item in arraylist
    0 讨论(0)
  • 2020-12-20 12:38

    There is no effective difference. I believe the extra declarations are there for clarity.

    When checked in Reflector, classes which in code implement IList have the same interface declaration list as classes which in code declare implementing all of Ilist, ICollection and IEnumerable.

    0 讨论(0)
  • 2020-12-20 12:39

    With the following code:

    interface I1 { }
    interface I2 : I1 { }
    
    class Foo: I2 { }
    

    If you look at Foo through reflection you will find

    class Foo: I2, I1 { }
    

    Which is also valid to compile and gives the same result.
    So the difference is moot, and in documenting Foo you might as well write it with both interfaces.

    Also see the SO question: Why collections classes in C# (like ArrayList) inherit from multiple interfaces if one of these interfaces inherits from the remaining?

    0 讨论(0)
提交回复
热议问题