为什么`Random`默认不包含静态`Next`方法?

时间:2012-05-15 09:56:06

标签: c# .net random

  

可能重复:
  class System.Random .. why not static?

"Generated random numbers are always equal"之后,我在想;

为什么Random类没有为Next公开一个带有可选最小值和最大值的静态方法?这可能听起来像一个愚蠢的问题,但从经验来看,我想要生成一个随机数,而不必明确指定一个种子?我错过了一些明显的东西,这是有原因的吗?或者实际上是一种我正在解释我还没有发现的方法吗?

1 个答案:

答案 0 :(得分:6)

  

这可能听起来像一个愚蠢的问题,但根据经验,我想生成一个随机数9次,而不必明确指定种子?

尽管如此,你不应该使用静态方法。您应该在 维护状态的事物上使用实例方法。如果您每次拨打Random时都创建了Next的新实例,那么如果您连续多次调用它,您最终会重复数字。

你应该把"随机数的来源"作为一种依赖,像任何其他IMO - 注射,以便可测试。当然,如果你不使用依赖注入,那么这个论点可能不适用......但是你还有其他问题。

您可能希望每个帖子有一个Random个实例,因为Random不是线程安全的。

有关详细信息和代码示例,请参阅我的article on random numbers