如果您到处使用System.Random
,是否有一种卫生的方法来确保它是应用程序范围的单例?我有几个选择,包括以下内容:
- 全局静态成员 - 这会产生必须调用
SomeClass.Random.Next()
的不幸效果。这可以通过使用静态
来缓解,但这种方法并不能真正扩展,因为您必须在任何地方都这样做。 - 派生单例——简单地从
Random
派生(它不是密封
!)并使该类成为惰性线程安全单例 - 在 DI 中将随机数注册为单例并注入(inject) - 但将
Random
注入(inject)到每个类中确实很乏味
理想情况下,我只想在任何类中调用一些rand()
,并让它们全部引用单个实例。
最佳答案
this has the unfortunate effect of having to call
SomeClass.Random.Next()
不,它不会:考虑这样的类型:
internal static class Foo
{
private static readonly Random s_random = new Random();
// todo: any thread safety concerns
public static int Rand() => s_random.Next();
public static int Rand(int minValue, int maxValue) => s_random.Next(minValue, maxValue);
}
现在您可以在想要使用它的文件顶部添加 using staticDeclaration.Foo;
,并且现在您只需使用 Rand( )
没有任何其他内容。
关于c# - 在整个应用程序中共享一个随机的卫生方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60070621/