有没有办法在类中创建唯一的实例?
此时,我正在尝试只创建一个Random类的实例。有几次我需要用一粒种子。以后可以更换种子吗?
我不确定,我猜这是一个单身人士。
更新:我需要的是只有一个Random类的实例。这个想法是使用相同种子的几次。但是后来我需要更改种子,所以我不确定单例是否是最好的方法,因为我猜更改种子意味着创建一个新实例。
答案 0 :(得分:6)
如果您需要一个单一全局(每个域,每个线程或每个)的实例,那么 Singleton 是正确的方法。
请参阅Jon Skeet的this article,了解如何正确行事。
由于您正在尝试创建无法修改的现有类的单个实例,这意味着您无法限制对其构造函数的访问,因此唯一的方法是:
如果你需要在一个类的上下文中使用单个实例,那么我认为使用像private static readonly
修饰符这样的东西或以任何其他方式控制它的实例是非常明显的,因为它会隐藏在外部词之外。
答案 1 :(得分:6)
在你描述的情况下,单身人士是过度的。在任何情况下,由于单元测试的困难,我通常会建议单身人士。
由于您已指定需要定期重新种植,因此您必须不使用readonly
关键字。
例如:
public class Foo
{
private static Random randGen = new Random();
public void Foo()
{
int i = this.randGen.Next();
}
public void Bar()
{
int j = this.randGen.Next();
}
public void ReseedRandomNumberGenerator(int? seed = null)
{
this.randGen = seed.HasValue ? new Random(seed.Value) : new Random();
}
}