当C#中的Object Variable声明为static时会发生什么

时间:2014-01-31 09:49:18

标签: c# object random static

我在Random循环中创建了一个名为x的{​​{1}}类对象,并调用for,该对象应返回x.next(1,7)和{{1}之间的变量},对象创建和1函数都放在for循环中,执行6次而不是返回随机变量,它在每次迭代中返回相同的值

x.next()

我的输出如下

5

当我将对象声明放在循环之外时,它会在每次迭代中返回随机变量

using System;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            for(int i=1;i<=5;i++)
            {
                Random x = new Random();

                Console.WriteLine( x.Next(1,7));
            }

        }
    }
}

这次我的输出是

5
5
5
5
5

并且当 using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Random x = new Random(); for(int i=1;i<=5;i++) { Console.WriteLine( x.Next(1,7)); } } } } 被声明为类Program的静态变量时也可以工作,如下所示

4
5
9
3
1

现在输出

x

但我想知道为什么在循环内声明对象时返回相同的值 当对象变量声明为静态时会发生什么?

1 个答案:

答案 0 :(得分:4)

这是因为Random的默认构造函数使用种子的当前系统时钟时间。

因为系统时钟时间每秒只更新几次,如果你在紧密循环中构造了很多Random个对象,它们将被创建得如此之快以至于系统时钟时间没有改变,导致他们使用相同的种子。

如果使用相同的种子构造两个Random个对象,它们将生成相同的随机数序列。这就是你所看到的。