我问是因为我认为C#要求所有接口都必须在该类中实现。使用ILSpy,我发现IReadOnlyList.this [int index]索引器实现不在List类中。
这是类声明的编辑摘要(未列出所有内容)
public class List < T > : IList <T >, IReadOnlyList < T >
IList<T>.this[int index]
在这里,但没有IReadOnlyList<T>.this[int index]
。
看起来好像很奇怪,首先它是如何编译的? .NET Framework中是否有一些特殊的调味料可以做到这一点?
答案 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