为什么List <t>不显式实现IReadOnlyList <t>?

时间:2018-09-03 00:24:06

标签: c# list generics

我问是因为我认为C#要求所有接口都必须在该类中实现。使用ILSpy,我发现IReadOnlyList.this [int index]索引器实现不在List类中。

这是类声明的编辑摘要(未列出所有内容)

public class List < T > : IList <T >, IReadOnlyList < T >

List class declaration

IList<T>.this[int index]在这里,但没有IReadOnlyList<T>.this[int index]

ILSpy search

看起来好像很奇怪,首先它是如何编译的? .NET Framework中是否有一些特殊的调味料可以做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为您使用的工具引起了混乱。列表中的索引器未明确实现为IList实现。

public class List<T> : ICollection<T>, IEnumerable<T>, IEnumerable, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection, IList
{
    (...)
    public T this[int index] { get; set; }

这是一个带有实现两个接口的类的简单代码段,以证明可以为两个接口提供一个单独的实现。

    public interface IOne{void MyMethod();}

    public interface ITwo{void MyMethod();}

    public class MyClass: IOne, ITwo
    {
        public void MyMethod()
        {
            Console.WriteLine("Hello!");
        }
    }

    public static void Main()
    {
        new MyClass().MyMethod();
    }

答案 1 :(得分:0)

要使用 let newVC = MYCustomViewController(nibName: "MYCustomViewController", bundle: .main) IReadOnlyCollection的预实现类型,可以使用IReadOnlyList。请查看以下示例代码:

ReadOnlyCollection