asp.net

IReadOnlyCollection与IReadOnlyList

2024-01-14

.NET Core同样定义了一系列仅提供只读操作的集合及列表接口:

public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable

{

    int Count { get; }

}

public interface IReadOnlyList<out T> : IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable

{

    T this[int index] { get; }

}

由于上述接口的类型参数仅仅在输出时使用,因此被标记为协变参数。这样我们就可以将一个“猫咪”的列表表示为一个“动物”的只读列表。

相反,在IList<T>和ICollection<T>中,由于T在输入输出时均被使用,因此没有标记为协变参数。