Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Classe Random

Rappresenta un generatore di numeri pseudo-casuali, una periferica che produce una sequenza di numeri che soddisfano determinati requisiti statistici di casualità.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Random

Il tipo Random espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreRandom()Inizializza una nuova istanza della classe Random utilizzando un valore di inizializzazione predefinito dipendente da un fattore temporale.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreRandom(Int32)Inizializza una nuova istanza della classe Random usando il valore di inizializzazione specificato.
In alto

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreEquals(Object) Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreFinalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetHashCode Funge da funzione hash per un particolare tipo. (Ereditato da Object)
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetType Ottiene il Type dell'istanza corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreMemberwiseClone Crea una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNext()Restituisce un numero intero casuale non negativo.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNext(Int32)Restituisce un numero intero casuale non negativo inferiore al massimo specificato.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNext(Int32, Int32)Restituisce un numero intero casuale all'interno di un intervallo specificato.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNextBytesConsente di inserire numeri casuali negli elementi di una matrice di byte specificata.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNextDoubleRestituisce un numero a virgola mobile casuale compreso tra 0,0 e 1,0.
Metodo protettoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreSampleRestituisce un numero a virgola mobile casuale compreso tra 0,0 e 1,0.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
In alto

I numeri pseudo-casuali sono selezionati con uguale probabilità da un gruppo finito di numeri. I numeri selezionati non sono completamente casuali, poiché un algoritmo matematico definito viene utilizzato per selezionarli, ma sono sufficientemente casuali per essere utilizzati per scopi pratici. L'implementazione corrente della classe Random si basa su Donald E. L'algoritmo del generatore di numeri casuali sottrattivo di Knuth. Per ulteriori informazioni, vedere D. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.

La generazione casuale di numeri inizia da un valore di inizializzazione. Se lo stesso valore di inizializzazione è utilizzato ripetutamente, viene generata la stessa serie di numeri. Un modo per produrre sequenze diverse consiste nel rendere il valore di inizializzazione dipendente da un fattore temporale, producendo così una diversa serie a ogni nuova istanza di Random. Per impostazione predefinita, il costruttore senza parametri della classe Random utilizza il clock di sistema per generare il valore di inizializzazione, mentre il costruttore con parametri può accettare un valore Int32 in base al numero di segni di spunta nella posizione corrente. Tuttavia, poiché il clock ha una risoluzione limitata, l'utilizzo del costruttore senza parametri per creare oggetti Random diversi in stretta successione dà origine a generatori di numeri casuali che producono sequenze identiche di numeri casuali. Nell'esempio seguente viene illustrato come due oggetti Random di cui viene creata un'istanza in stretta successione generino una serie identica di numeri casuali.


byte[] bytes1 = new byte[100];
byte[] bytes2 = new byte[100];
Random rnd1 = new Random();
Random rnd2 = new Random();

rnd1.NextBytes(bytes1);
rnd2.NextBytes(bytes2);

Console.WriteLine("First Series:");
for (int ctr = bytes1.GetLowerBound(0); 
     ctr <= bytes1.GetUpperBound(0); 
     ctr++) { 
   Console.Write("{0, 5}", bytes1[ctr]);
   if ((ctr + 1) % 10 == 0) Console.WriteLine();
} 
Console.WriteLine();
Console.WriteLine("Second Series:");        
for (int ctr = bytes2.GetLowerBound(0);
     ctr <= bytes2.GetUpperBound(0);
     ctr++) {
   Console.Write("{0, 5}", bytes2[ctr]);
   if ((ctr + 1) % 10 == 0) Console.WriteLine();
}   
// The example displays the following output to the console:
//       First Series:
//          97  129  149   54   22  208  120  105   68  177
//         113  214   30  172   74  218  116  230   89   18
//          12  112  130  105  116  180  190  200  187  120
//           7  198  233  158   58   51   50  170   98   23
//          21    1  113   74  146  245   34  255   96   24
//         232  255   23    9  167  240  255   44  194   98
//          18  175  173  204  169  171  236  127  114   23
//         167  202  132   65  253   11  254   56  214  127
//         145  191  104  163  143    7  174  224  247   73
//          52    6  231  255    5  101   83  165  160  231
//       
//       Second Series:
//          97  129  149   54   22  208  120  105   68  177
//         113  214   30  172   74  218  116  230   89   18
//          12  112  130  105  116  180  190  200  187  120
//           7  198  233  158   58   51   50  170   98   23
//          21    1  113   74  146  245   34  255   96   24
//         232  255   23    9  167  240  255   44  194   98
//          18  175  173  204  169  171  236  127  114   23
//         167  202  132   65  253   11  254   56  214  127
//         145  191  104  163  143    7  174  224  247   73
//          52    6  231  255    5  101   83  165  160  231        


Questo problema può essere evitato creando un unico oggetto Random.

Per migliorare le prestazioni, creare un unico oggetto Random che generi molti numeri casuali nel tempo, anziché creare ripetutamente nuovi oggetti Random che generino un solo numero casuale.

Per generare un numero casuale sicuro da un punto di vista crittografico e adatto alla creazione di una password casuale, ad esempio, utilizzare una classe derivata da System.Security.Cryptography.RandomNumberGenerator come System.Security.Cryptography.RNGCryptoServiceProvider.

Note per i chiamanti

L'implementazione del generatore di numeri casuali nella classe Random non è sempre uguale nelle versioni principali di .NET Framework. Di conseguenza, il codice dell'applicazione non deve presupporre che lo stesso valore di inizializzazione comporti la stessa sequenza pseudocasuale in versioni diverse di .NET Framework.

Note per gli eredi

Nelle versioni 1.0 e 1.1 di .NET Framework, una implementazione minima di una classe derivata da Random richiedeva l'override del metodo Sample per definire un algoritmo nuovo o modificato per la generazione di numeri casuali. La classe derivata poteva quindi basarsi sull'implementazione della classe base dei metodi Random.Next(), Random.Next(Int32), Random.Next(Int32, Int32), NextBytes e NextDouble per chiamare l'implementazione della classe derivata del metodo Sample.

Nelle versioni 2.0 e successive di .NET Framework, il comportamento dei metodi Random.Next(), Random.Next(Int32, Int32) e NextBytes è cambiato cosicché tali metodi non chiamano più necessariamente l'implementazione della classe derivata del metodo Sample. Ne consegue che anche le classi derivate da Random destinate a .NET Framework 2.0 e versioni successive dovrebbero eseguire l'override di questi tre metodi.

Nell'esempio seguente viene creato un unico generatore di numeri casuali e vengono chiamati i metodi NextBytes, Nexte NextDouble per generare sequenze di numeri casuali all'interno di intervalli diversi.


// Instantiate random number generator using system-supplied value as seed.
Random rand = new Random();
// Generate and display 5 random byte (integer) values.
byte[] bytes = new byte[4];
rand.NextBytes(bytes);
Console.WriteLine("Five random byte values:");
foreach (byte byteValue in bytes)
   Console.Write("{0, 5}", byteValue);
Console.WriteLine();   
// Generate and display 5 random integers.
Console.WriteLine("Five random integer values:");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,15:N0}", rand.Next());
Console.WriteLine();
// Generate and display 5 random integers between 0 and 100.//
Console.WriteLine("Five random integers between 0 and 100:");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N0}", rand.Next(101));
Console.WriteLine();
// Generate and display 5 random integers from 50 to 100.
Console.WriteLine("Five random integers between 50 and 100:");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N0}", rand.Next(50, 101));
Console.WriteLine();
// Generate and display 5 random floating point values from 0 to 1.
Console.WriteLine("Five Doubles.");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N3}", rand.NextDouble());
Console.WriteLine();
// Generate and display 5 random floating point values from 0 to 5.
Console.WriteLine("Five Doubles between 0 and 5.");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N3}", rand.NextDouble() * 5);
// Sample console output might appear as follows:
//    Five random byte values:
//      194  185  239   54  116
//    Five random integer values:
//        507,353,531  1,509,532,693  2,125,074,958  1,409,512,757    652,767,128
//    Five random integers between 0 and 100:
//          16      78      94      79      52
//    Five random integers between 50 and 100:
//          56      66      96      60      65
//    Five Doubles.
//       0.943   0.108   0.744   0.563   0.415
//    Five Doubles between 0 and 5.
//       2.934   3.130   0.292   1.432   4.369      


L'esempio seguente genera un intero casuale che utilizza come indice per recuperare un valore di stringa da una matrice.


using System;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      string[] malePetNames = { "Rufus", "Bear", "Dakota", "Fido", 
                                "Vanya", "Samuel", "Koani", "Volodya", 
                                "Prince", "Yiska" };
      string[] femalePetNames = { "Maggie", "Penny", "Saya", "Princess", 
                                  "Abby", "Laila", "Sadie", "Olivia", 
                                  "Starlight", "Talla" };                                      

      // Generate random indexes for pet names.
      int mIndex = rnd.Next(malePetNames.Length);
      int fIndex = rnd.Next(femalePetNames.Length);

      // Display the result.
      Console.WriteLine("Suggested pet name of the day: ");
      Console.WriteLine("   For a male:     {0}", malePetNames[mIndex]);
      Console.WriteLine("   For a female:   {0}", femalePetNames[fIndex]);
   }
}
// The example displays the following output:
//       Suggested pet name of the day:
//          For a male:     Koani
//          For a female:   Maggie


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft