使用System.Random
该类时,必须创建它的实例.为什么不static
呢?因为如果我想要一个0到9之间的随机数,我可以使用静态方法,System.Random.Next(int, int)
:
int ourRandomNumber = Random.Next(0,9);
Run Code Online (Sandbox Code Playgroud)
那么为什么不上课static
呢?
Bro*_*ass 31
如果它是静态的,您将无法使用不同的种子 - Random实例会跟踪该状态.默认情况下,Random使用当前时间作为种子,但重新使用特定种子(即new Random(42)
)允许您精确重复随机数序列 - 它们对于同一种子始终是相同的.这方面在某些应用中非常重要.例如,Minecraft.
Jon*_*eet 17
Random
不是线程安全的.Random
每个线程有一个实例,但不应同时使用多个线程中的一个实例.因此,您不能只Random
在静态变量中使用一个实例并使用静态方法中的实例.
此外,如果提到的话,将其设为静态会消除给出特定种子的机会BrokenGlass
.
当然,在不需要指定种子的情况下创建处理线程安全性的静态方法并不难,但是当您想要使用特定实例时仍然保留实例方法.就个人而言,我认为将"随机数源"视为在适当时注入的依赖是恰当的.
我有一篇文章介绍了其中的一些内容,您可能会觉得它很有用.