我正在尝试从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实例的种子,因为所有代码都将使用同一实例,因此不会看到重复的数字。

08-03 21:52