在.NET的Random类中设计目标/首选项

时间:2013-01-28 15:29:13

标签: c# .net random

我在一些项目中使用过.NET的Random类,但我常常想知道为什么它被设计为实例对象,而不是使用返回随机值的静态方法。

例如:

Random rnd = new Random()
int x = rnd.Next(0, 255);

有没有任何理由或设计选择为什么它不是用实例和静态方法设计的,所以我可以这样做:

int x = Random.Next(0, 255);

是否有任何原因未实现此功能,因为我认为它会有用?

3 个答案:

答案 0 :(得分:2)

System.Random有两个构造函数,一个是裸构造函数,另一个是接受种子的构造函数(生成任意随机数的基础)。

如果这是一个静态方法,那么你需要每次传递种子或允许某种默认方式。

你可能想要检查这个问题,看看为什么种子真的很重要。

How do I seed a random class to avoid getting duplicate random values

答案 1 :(得分:0)

Random作为实例对象允许您配置Randomgenerator;

  

为不同的Random对象提供相同的种子值   每个实例产生相同的随机数序列。

例如,测试

时,这会变得非常方便

请参阅Random Constructor (Int32)

答案 2 :(得分:0)

如果您建议使用静态Random.Next方法,则必须将其设计为使得同时调用它的多个线程不会破坏状态。当前Random类不支持多个并发用户。

此外,如果只有一个Random实例,则代码的两部分不能依赖于不同的随机序列。当用C编码时,我遇到了很多次问题,它有一个全局随机数生成器。我最终不得不编写自己的每个实例生成器。

使随机数生成器成为实例类而不是静态可以为您提供更大的灵活性。如果您只想在程序中使用一个全局,请在全局范围内声明它并使用它,就像只有一个静态Random对象一样。它最终只是一行代码。