我在自定义类Foo中有static readonly List<string> ValidatedProperties = new List<string>();
,在Foo的构造函数中我调用
protected Foo()
{
foreach(var prop in properties)
{
ValidatedProperties.Add(prop.Name);
Console.WriteLine(prop.Name);
}
}
当我创建一个新的Foo时,它会按预期打印出来,但是,它会在每次时创建一个新的Foo。
每次创建另一个Foo对象时,是否重写了ValidatedProperties?或者是因为Console.WriteLine
而只是再次显示每个属性?
答案 0 :(得分:4)
每次创建Foo实例时,都会向ValidatedProperties添加一个条目。
只读意味着List不能被其他列表替换 - 这并不意味着列表的内容不能改变。
答案 1 :(得分:3)
我感觉你要做的是拥有一个在Foo
的所有实例之间共享的列表,但只填充一次。也许你想要一个静态构造函数:
static Foo()
{
// note that properties needs to be static too!
foreach(var prop in properties)
{
ValidatedProperties.Add(prop.Name);
Console.WriteLine(prop.Name);
}
}
public Foo()
{
// regular constructor for creating an instance of Foo
}
虽然,除非properties
来自某些外部来源(例如数据库,网络服务,文件),否则在声明时填充ValidatedProperties
要容易得多:
static readonly List<string> ValidatedProperties = new List<string>() { "foo", "bar" }
您甚至可以使用ReadOnlyCollection<string>
来阻止任何人稍后添加它:
static readonly ReadOnlyCollection<string> ValidatedProperties =
new ReadOnlyCollection<string>(new string[] {"foo", "bar" });