对于某些类,理想情况下,我想创建特殊的命名实例,类似于“null”。据我所知,这是不可能的,因此,我使用静态构造函数创建类的静态实例,类似于:
public class Person
{
public static Person Waldo; // a special well-known instance of Person
public string name;
static Person() // static constructor
{
Waldo = new Person("Waldo");
}
public Person(string name)
{
this.name = name;
}
}
如您所见,Person.Waldo 是我创建的 Person 类的一个特殊实例,因为在我的程序中,有很多其他类可能想要引用这个特殊的知名实例。
实现这种方式的缺点是我不知道有什么方法可以使 Person.Waldo 的所有属性不可变,而“普通” Person 实例的所有属性都应该是可变的。每当我不小心有一个 Person 对象引用了 Waldo,并且我不小心没有检查它是否引用了 Waldo,然后我不小心破坏了 Waldo 的属性。
有没有更好的方法,甚至是一些额外的替代方法来定义一个类的特殊众所周知的实例?
我现在知道的唯一解决方案是实现 get & set 访问器,并在每个集合上检查“if (this == Waldo) throw new ...”。虽然这可行,但我认为 C# 在实现它方面比我做得更好。如果我能找到一些 C# 方法来使 Waldo 的所有属性只读(静态构造函数期间除外。)