0

重複の可能性:
class System.Random .. static ではないのはなぜですか?

「生成された乱数は常に等しい」に続いて、私は疑問に思っていました。

クラスがオプションの最小値と最大値を持つRandom静的メソッドを公開しないのはなぜですか? Nextこれはばかげた質問のように聞こえるかもしれませんが、経験からすると、10 回中 9 回、シードを明示的に指定せずに乱数を生成したいですか? 明らかな何かが欠けていますか、これには理由がありますか? それとも、私がまだ発見していないことを説明している方法が実際にありますか?

4

1 に答える 1

6

これはばかげた質問のように聞こえるかもしれませんが、経験からすると、10 回中 9 回、シードを明示的に指定せずに乱数を生成したいですか?

ただし、そのために静的メソッドを使用するべきではありません。状態を維持するものに対してインスタンス メソッドを使用する必要がありますRandomを呼び出すたびにの新しいインスタンスを作成するとNext、立て続けに数回呼び出すと、番号が繰り返されることになります。

「乱数のソース」を他のIMOと同様に依存関係と見なす必要があります-テスト可能にするために注入可能です。もちろん、依存性注入を使用していない場合、この議論は当てはまらないかもしれません...しかし、他の問題があります。

スレッドセーフではないため、おそらくRandomスレッドごとに 1つのインスタンスが必要です。Random

詳細とコード サンプルについては、乱数に関する私の記事を参照してください。

于 2012-05-15T09:59:39.690 に答える