【问题标题】:Why Are there Two Constructors for the Random Class?为什么随机类有两个构造函数?
【发布时间】:2011-10-30 22:43:58
【问题描述】:

我有一个关于Random 类构造函数的问题。有两种构造函数,一种带有种子参数,一种没有种子。

在没有种子(无参数构造函数)的情况下使用 Random 类的用例是什么?我想不出任何情况...

【问题讨论】:

  • 没有种子怎么办?
  • 如果你指定一个 Random 实例而不传入种子值,它会使用系统时钟来种子随机值。
  • 我的意思是,我没有方便的种子这一事实将成为无参数随机构造函数的用例。

标签: c# .net random


【解决方案1】:

Random 总是有一个种子。使用带有seed 参数的构造函数的唯一作用是允许您使用自己的种子,而不是为您生成的种子。如果您没有一种方便的方法来自己生成一个比生成的种子更“随机”的种子值(并且您不需要使用特定 种子值),则无需提供。

【讨论】:

  • 很难做得比默认实现差。
  • @CodeInChaos:是的,但除非您在彼此靠近的情况下实例化 Random 的新实例,否则默认值很可能就足够了。
  • @CodeInChaos - 唯一的问题是当您在紧密循环中实例化 Random 实例时。提供您自己的种子值可能会产生相同的效果。
  • @ChaosPandion:同意,如果您需要循环中的随机性,您可以在循环外声明一个 Random
  • 假设你有一个网页游戏。多个请求可能同时启动,对于每个请求实例的场景,您不能依赖默认(时钟)种子。你必须控制种子。
【解决方案2】:

如果使用带有种子的构造函数,每次使用相同的种子值将导致每次生成相同的数列。这对于测试预期场景很有用。

您可以使用默认构造函数进行测试(它将使用基于时间的种子)来测试间歇性场景。

【讨论】:

    猜你喜欢
    • 2012-02-10
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多