here,hereおよびhereのように、異なる乱数を確保するには、Random
クラスのインスタンスを1つだけ使用する必要があります。C#乱数を生成するライブラリを使用しているときにランダムなインスタンスを使用する
私のライブラリでは乱数が必要なので、Randomizer
というクラスを作成しました。このメソッドは、Random
インスタンスを使用して乱数を返すメソッドを提供します。ここRandomizer
コードの断片である:
class Randomizer
{
private Randomizer() { }
public static Randomizer Instance { get; } = new Randomizer();
private static readonly Random random = new Random();
private static readonly object syncLock = new object();
public int Next(int minValue, int maxValue)
{
lock(syncLock)
{
return random.Next(minValue, maxValue);
}
}
// rest of code
}
は今、私のライブラリのユーザーは、乱数を何が必要な場合は? Randomizer
クラスを公開し、ライブラリーのドキュメントで乱数を生成するために私のRandomizer
クラスを使用する必要があるかどうかを指定する必要がありますか?
あなたは、少なくとも乱数が使用されますどのような 'Random'インスタンス –
を取るコンストラクタを提供する必要があります。内部的に使用ジェネレータ(
Default
)が公にづけしているが、それは完璧にのみ内蔵可能性があることに注意してください? – Jonathan私は 'Random'インスタンスを取るコンストラクタを提供する場合、私は自分のライブラリのどこかに' Random'インスタンスを作成する必要があります。次に、このインスタンスを返すpublic(ライブラリ外)のプロパティまたはメソッドを作成する必要がありますか?または、ライブラリのユーザが 'Random'インスタンスを作成し、それを' Randomizer'コンストラクタに渡すべきです**他のライブラリクラスのいずれかが使用される前に**? @Matt私はそれを知っていますが、 'Random.Next(int、int)'メソッドでは、2番目の引数はmaxValueとも呼ばれます。 @Jonathan乱数が何らかの指定よりも小さいかどうかをチェックするために使用します値。 – Darko