【发布时间】:2019-07-21 05:59:47
【问题描述】:
read only 关键字与 List 结合使用是否违反了??
例如
class Program
{
public List<string> InputList;
public List<string> DefaultList;
public readonly List<string> ReadOnlyList;
public Program()
{
InputList = new List<string>() { "Initialized String" };
DefaultList = InputList;
ReadOnlyList = InputList;
}
static void Main(string[] args)
{
var p = new Program();
p.SampleMethod();
Console.ReadKey();
}
private void SampleMethod()
{
Console.WriteLine("inputList - " + InputList.LastOrDefault());
Console.WriteLine("readOnlyList - " + ReadOnlyList.LastOrDefault());
Console.WriteLine("defaultList - " + DefaultList.LastOrDefault());
InputList.Add("Modified String");
Console.WriteLine("inputList - " + InputList.LastOrDefault());
Console.WriteLine("readOnlyList - " + ReadOnlyList.LastOrDefault());
Console.WriteLine("defaultList - " + DefaultList.LastOrDefault());
}
}
以及打印出来的输出
inputList - Initialized String
readOnlyList - Initialized String
defaultList - Initialized String
inputList - Modified String
readOnlyList - Modified String
defaultList - Modified String
只读的概念是,如果它没有被初始化,它的值只能在构造函数内部改变。所以在上面的例子中,当两个集合在运行时被改变时,ReadOnlyList 和 DefaultList 之间的确切区别是什么。
我也发现将 ReadOnlyList 更改为 IReadOnlyCollection 并没有什么区别。有人可以帮我理解这个概念吗?
【问题讨论】:
-
您误解了
readonly关键字的作用 -
readonly适用于引用,而不是列表的内容。 -
“只读的概念是,它的值只能在构造函数内部更改”取决于“值”的含义。没错,您不能重新引用该变量。但是,您当然可以调用该实例上的任何成员,例如
Add.
标签: c# list readonly readonly-collection