鉴于以下情况:如果 IReadOnly(T) 是从现有的 MutableEquivalent(T) 构想出来的,那么简单地转换为可变版本就允许完全访问,并且对其他人可能依赖的对象进行更改,这真的是这样吗?静态元素/数量?下面的输出显示了我的“THIRD INJECTION”字符串,尽管迭代了只读集合。难道只是出于礼貌和自我控制而禁止向下转换只读集合吗?您是否应该看到提供的接口,并承受其限制,强制转换不变,仅由于类型?感谢您对该界面和其他类似界面真正承诺/保证的任何澄清。
编辑-这不是 IReadOnlyCollection<T>
与 List.AsReadOnly() 的重复,因为我在问题中没有提到 List.AsReadOnly() ,也没有提到 IReadOnlyCollection 。这些是由响应者介绍的。这是一个关于 IReadOnly 接口后面的底层可变列表暴露的问题。一些评论中有一些重叠,但有一个问题,例如“IReadOnly 实际上对其底层可变列表(T)做了什么?” 重复了我的问题的精神。不是“这两个有关只读的实体之间有什么区别?”,因为我只提到了一个。
static class Program
{
public static void Main()
{
List<string> hack = (List<string>) READONLY;
hack.Add("THIRD INJECTION");
foreach (var s in READONLY)
{
Console.WriteLine(s);
}
}
public static readonly IReadOnlyList<string> READONLY = new List<string>{"@0", "@1"};
}
Run Code Online (Sandbox Code Playgroud)