我在一些项目中使用过.NET的Random类,但我常常想知道为什么它被设计为实例对象,而不是使用返回随机值的静态方法。
例如:
Random rnd = new Random()
int x = rnd.Next(0, 255);
有没有任何理由或设计选择为什么它不是用实例和静态方法设计的,所以我可以这样做:
int x = Random.Next(0, 255);
是否有任何原因未实现此功能,因为我认为它会有用?
答案 0 :(得分:2)
System.Random
有两个构造函数,一个是裸构造函数,另一个是接受种子的构造函数(生成任意随机数的基础)。
如果这是一个静态方法,那么你需要每次传递种子或允许某种默认方式。
你可能想要检查这个问题,看看为什么种子真的很重要。
How do I seed a random class to avoid getting duplicate random values
答案 1 :(得分:0)
Random作为实例对象允许您配置Randomgenerator;
为不同的Random对象提供相同的种子值 每个实例产生相同的随机数序列。
例如,测试
时,这会变得非常方便答案 2 :(得分:0)
如果您建议使用静态Random.Next
方法,则必须将其设计为使得同时调用它的多个线程不会破坏状态。当前Random
类不支持多个并发用户。
此外,如果只有一个Random
实例,则代码的两部分不能依赖于不同的随机序列。当用C编码时,我遇到了很多次问题,它有一个全局随机数生成器。我最终不得不编写自己的每个实例生成器。
使随机数生成器成为实例类而不是静态可以为您提供更大的灵活性。如果您只想在程序中使用一个全局,请在全局范围内声明它并使用它,就像只有一个静态Random
对象一样。它最终只是一行代码。