Зачем мне делать объект Random статичным, если я вызываю его из конструкторов? - PullRequest
0 голосов
/ 22 марта 2012
class Student
{
    private string FirstName { get; set; }
    private string LastName { get; set; }
    private int age { get; set; }
    private int studentID { get; set; }
    private static int count = 0;
    **static Random randomNumber = new Random(); // works**
    **Random randomNumber = new Random();  // doesn't work I get the same studentID number**
    public Student()// constructor 
    {

        this.studentID = randomNumber.Next(1000000, 100000000);
        count++;
        Console.WriteLine("count {0}  studentID {1}", count, studentID);
    }

    public Student(string first, string last, int age)
    {

        this.studentID = randomNumber.Next(1000000, 100000000);
        count++; 
        Console.WriteLine("count {0}  studentID {1}", count, studentID);
        this.FirstName = first;
        this.LastName = last;
        this.age = age;
    }
   ...... continuation

    a few get methods

    ...... continuation

    public void PrintData()
    {
        Console.WriteLine("Name is {0}, Lastname is {1} , Age is {2} , studentID is  {3}", FirstName, LastName, age, this.studentID);
    }

Почему я продолжаю получать одно и то же число, но если я сделаю объект Random статическим, он генерирует / присваивает новый номер.Не уверен, где моя логика неисправна.

1 Ответ

1 голос
/ 22 марта 2012

Если вы продолжаете создавать новые объекты Random в конструкторе, он будет сбрасывать начальное значение (если вы не предоставите аргументы, начальное значение будет установлено на текущее время (см .: MSDN: случайный конструктор ) -так что если вы создадите несколько объектов Random очень близко друг к другу (по времени), то у них будет одинаковое начальное число).Поскольку Random не является действительно случайным (если вы инициируете его из одного и того же начального числа, вы всегда будете возвращать одну и ту же последовательность), вы получите те же числа обратно в нестатической версии.Статическая версия создается только один раз, и вы продолжаете запрашивать у нее следующее число в последовательности, следовательно, она, кажется, дает вам реальные случайные числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...