为什么我的静态只读成员被实例化多次
本文关键字:实例化 成员 我的 静态 只读 为什么 | 更新日期: 2023-09-27 17:50:15
我在自定义类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时,它都会这样做。
是ValidatedProperties被重写每次我创建另一个Foo对象?还是因为Console.WriteLine
,它只是再次显示每个属性?
每次创建Foo实例时,都要向ValidatedProperties添加一个条目。
只读仅表示该列表不能被另一个列表替换,并不表示列表的内容不能更改。
我有一种感觉,你想做的是有一个单一的列表,是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
来自一些外部来源(例如数据库,web服务,文件),它会更容易填充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" });