为什么定义为静态或非静态时Random变量的行为会有所不同?

Wol*_*ang 0 c# random wpf static-variables

我的问题是:为什么变量"_random"的行为在定义为静态/非静态时会发生变化?

==>静态定义时:_random.nextDouble()返回真正的随机值.

==>当不是:_random.nextDouble()返回几乎相同的值.

class Shape   
{  
    protected Canvas _canvas;
    protected UIElement _element;
    static Random _random = new Random();

    public Shape(Canvas canvas)
    {
        _canvas = canvas;
    }

    public void Draw()
    {
        double val1 = _canvas.ActualWidth * _random.NextDouble();
        double val2 = _canvas.ActualHeight * _random.NextDouble();
        _element.SetValue(Canvas.LeftProperty, val1);
        _element.SetValue(Canvas.TopProperty, val2);
        _canvas.Children.Add(_element);
    }

}


public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Shape s1 = new Circle(MemoCanvas);

        for (int i = 0; i < 100; i++)
        {
            Shape shape1 = new Circle(MemoCanvas);
            shape1.Draw();

            Shape shape2 = new Square(MemoCanvas);
            shape2.Draw();

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:不知怎的,我无法格式化我的帖子,抱歉.

最好的祝福

mm8*_*mm8 5

因为您要RandomShape循环中创建的每个对象创建一个新对象,这意味着它们将生成与从系统时钟播种的随机生成器相同的随机数序列.

如果您Random在太近的时间内创建新实例,则会发生这种情况.

_random字段定义为时static,只会Random创建一个对象,并在Shape类的所有实例中使用.