Случайное число не имеет ничего общего со временем компиляции или во время выполнения. Это связано с тем, где создается экземпляр класса Random .
Класс Random на самом деле не генерирует истинные случайные числа. Они генерируются на основе математической формулы, которая включает текущую дату / время и несколько других бит данных.
Следующее:
Random r = new Random(100)
for(int i = 0; i < 100; i++)
{
Console.WriteLine(r.Netc().ToString());
}
сгенерирует случайную последовательность чисел.
Это:
for(int i = 0; i < 100; i++)
{
Random r = new Random(100);
Console.WriteLine(r.Next().ToString());
}
выдаст одинаковые числа для нескольких циклов, а затем новую серию похожих чисел для нескольких циклов.
Это из-за формулы. Во втором примере каждый класс Random создается с очень похожими условиями, и поэтому он будет выдавать одно и то же число, пока время не изменится достаточно для изменения результата.
Однако в первом примере есть только один класс Random, и в последующих итерациях цикла он знает, что нужно создать другое число, поскольку знает, что он только что сгенерировал один в последнем цикле.
Если ваш код вызывает функцию, которая объявила новый объект Random, а затем использует Random.Next, то в области действия вашей функции Random является новым объектом при каждом вызове. Поэтому, если ваши звонки в течение нескольких миллисекунд, вы получите тот же результат.