鉴于以下情况:如果 IReadOnly(of T) 是从现存的 MutableEquivalent(of T) 构想出来的,那么简单地转换为可变版本允许完全访问,并且更改其他人可能依赖的对象静态元素/计数?下面的输出显示了我的“第三次注入”字符串,尽管迭代了一个只读集合。仅仅是礼貌和自我控制禁止了只读集合吗?您是否应该看到提供的接口,并承担其限制,强制转换,仅由于类型?感谢您对这个接口和其他喜欢它的真正承诺/保证的任何澄清。
编辑-这不是 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"};
}