虛擬亂數是以相等的機率從有限的數字集中選取。選取的數字並非是完全隨機,因為是使用有限性數學演算法來選取它們,但是用於實際用途已足夠。目前 Random 類別的實作是以 Donald E. Knuth 的減法亂數產生器演算法為基準。如需詳細資訊,請參閱 D. E. Knuth 所著的《The Art of Computer Programming, volume 2: Seminumerical Algorithms》,Addison-Wesley, Reading, MA, second edition, 1981。
亂數的產生始於種子值。如果重複使用相同的種子會產生相同的連續數字。其中一個產生不同序列的方法是讓種子值時間相依,由此以每個 Random 的新執行個體 (Instance) 產生不同的系列。根據預設,Random 類別的無參數建構函式會使用系統時鐘來產生其種子值,而參數化的建構函式可以根據目前時間的刻度數目而接受 Int32 值。
然而,因為時鐘的解析度有限,所以若在極短時間內連續建立不同的 Random 物件,就會建立亂數產生器,產生序列完全相同的亂數。只要建立單一 Random 物件,而不要建立多個物件,就可以避免這個問題。
若要改善效能,則要建立一個 Random 以在一段時間內產生許多亂數,而不要重複地建立新的 Random 以產生一個亂數。
例如,若要產生密碼學上適用於建立隨機密碼的安全亂數,則使用從 System.Security.Cryptography..::.RandomNumberGenerator 衍生的類別,例如 System.Security.Cryptography..::.RNGCryptoServiceProvider。
繼承者注意事項 在 .NET Framework 1.0 和 1.1 版中,衍生自 Random 的類別最小實作 (Implementation) 需要覆寫 Sample 方法,用以定義產生亂數的全新或修改過的演算法。衍生類別 (Derived Class) 接著會依賴 Random..::.Next()()()、Random..::.Next(Int32)、Random..::.Next(Int32, Int32)、NextBytes 和 NextDouble 方法的基底類別 (Base Class) 實作,呼叫 Sample 方法的衍生類別實作。
在 .NET Framework 2.0 (含) 以後版本中,Random..::.Next()()()、Random..::.Next(Int32, Int32) 和 NextBytes 方法的行為已經變更,因此這些方法並不需要呼叫 Sample 方法的衍生類別實作。因此,衍生自使用 .NET Framework 2.0 (含) 以後版本之 Random 的類別應該也會覆寫這三種方法。