我正在尝试从Random类扩展功能。
public static class RandomExtensions
{
public static void NextEven(this Random rnd, int min, int max)
{
// ...
}
public static void ReseedRandomNumberGenerator(this Random rnd, int? seed = null)
{
rnd = seed.HasValue ? new Random(seed.Value) : new Random();
}
}
但是我的疑问是第二个函数ReseedRandomNumberGenerator。我需要许多类可以与Random类交互的东西,但是所有这些类都应具有相同的实例。
假设我调用ReseedRandom ...是否有可能比其他类刷新或更新新种子?
public class A()
{
protected Random Random = new Random();
}
public class B()
{
protected Random Random = new Random();
}
我知道这行不通。我不确定是否需要静态属性。
最佳答案
您需要使用单例模式(请参见MSDN上的Implementing Singleton in C#)
public class RandomSingleton
{
private static Random instance;
private RandomSingleton() {}
public static Random Instance
{
get
{
if (instance == null)
{
instance = new Randon();
}
return instance;
}
}
}
然后,您可以在代码中的任意位置访问相同的Random实例,如下所示:
RandomSingleton.Instance.NextInt(24);
请注意,无需重新设置该
Random
实例的种子,因为所有代码都将使用同一实例,因此不会看到重复的数字。