Clasa aleatoare (sistem)

Pentru a crea un număr aleator criptografic securizat, de exemplu, potrivit pentru generarea unei parole aleatorii, utilizați clasa RNGCryptoServiceProvider sau sunt derivate din clasele System.Security.Cryptography. RandomNumberGenerator.

Creați o instanță a unui generator de numere aleatoare, permițând valoarea inițială (valoarea inițială pentru algoritmul de generare de numere aleatorii pseudo) pentru constructorul clasei aleatoare. Puteți specifica o valoare inițială în mod direct sau indirect:

Aleatoare (int32) constructor utilizează o valoare inițială explicită, trebuie să specificați.

Aleator constructor () utilizează ceasul de sistem pentru a indica valoarea inițială. Acesta este cel mai comun mod de a crea o instanță a generatorului de numere aleatoare.

În cazul în care valoarea inițială este utilizată pentru diferite obiecte aleatorii, ei vor primi aceeași secvență de numere aleatoare. Acest lucru poate fi util pentru a crea o suita de teste care se ocupă de valori aleatoare, sau pentru a juca jocuri care sunt derivate datele lor de numere aleatoare. Cu toate acestea, rețineți că obiectele aleatorii în timpul rulării diferite versiuni ale .NET Framework poate returna o secvență diferită de numere aleatoare, chiar dacă acestea pot fi instanțiat fără aceeași valoare inițială.

Pentru a obține diferitele secvențe de numere aleatoare, valoarea inițială poate fi făcută în funcție de momentul în care permite crearea de secvențe diferite pentru fiecare nouă instanță a aleatorie. Aleatorie parametrizate (int32) constructorul poate lua o valoare int32 în funcție de numărul de cicluri în timpul curent, în timp ce constructorul random () constructorul folosește ceasul de sistem pentru a genera valoarea inițială. Cu toate acestea, datorită rezoluției finite a ceasului, folosind constructorul fără parametri pentru a crea diferite obiecte aleatoare într-o secvență de închis generat generatoare de numere aleatorii care produc secvențe identice de numere aleatoare. Următorul exemplu arată modul în care două obiecte aleatorii, dintre care instanțele sunt create într-o succesiune rapidă, crearea unor seturi identice de numere aleatoare. În cele mai multe sisteme, obiecte pentru Windows aleatorii create în termen de 15 de milisecunde unul de altul, este probabil să aibă aceeași valoare inițială.

Ea poate fi pusă în aplicare de la numărul moștenind clasa aleatoare aleatoare și furnizează algoritmul dvs. pentru a genera numere aleatoare. Pentru a specifica un algoritm personalizat, trebuie să suprascrie metoda eșantionului care implementează algoritmul pentru generarea de numere aleatoare. De asemenea, este necesar să se redefinească următoare (). În continuare (int32, int32). NextBytes și metode pentru a se asigura că acestea determină metoda Probei supracomandată. Nu este nevoie pentru a trece peste următoare (int32) și metodele NextDouble.

De exemplu, care este derivat din clasa aleatorie și de a schimba generatorul de numere aleatorii standard în pagina de referință secțiunea Exemplu.

Mai jos este un exemplu de cod și discută despre unele dintre modurile în care puteți utiliza un număr aleator în cerere.

Uneori doriți să creați aceeași secvență de numere aleatoare în scenariile de testare și jocuri. Testarea cu aceeași secvență de numere aleatoare poate detecta regresii și confirmarea remedieri. Folosind aceeași secvență de numere aleatoare în jocurile puteți juca jocurile anterioare.

Puteți crea aceeași secvență de numere aleatoare, oferind aceeași valoare inițială pentru aleatorie (int32) constructor. Valoarea inițială cuprinde o valoare inițială pentru algoritmul de generare de numere aleatoare. Exemplul următor utilizează 100100 ca o valoare inițială arbitrară pentru a crea un obiect aleatoare afișează 20 valori în virgulă mobilă aleatoare și stochează valoarea inițială. Apoi, el recuperează valoarea inițială, generează un nou generator de numere aleatoare, și afișează aceleași valori de 20 de numere aleatoare reale cu virgulă. Rețineți că exemplul poate da diferite secvență de numere aleatoare, atunci când rulează diferite versiuni de .NET Framework.

Furnizarea de diverse valori inițiale pentru instanțe din fiecare clasă de apeluri generator de numere aleatorii aleatorii pentru a genera o secvență diferită de valori. Selectați o valoare inițială, fie în mod explicit prin apelarea aleatorie (int32) constructor, sau implicit prin apelarea aleatorie) constructor (. Majoritatea dezvoltatorilor apelează constructorul fără parametri, care foloseste ceasul de sistem. Următorul exemplu utilizează această abordare pentru a crea două instanțe aleatorii. Fiecare exemplu este prezentată o serie de 10 de numere întregi aleatoare.

Pentru a evita această situație, este recomandat pentru a crea un singur exemplu de obiect aleatoriu, mai degrabă decât câteva sesiuni. Cu toate acestea, deoarece nu thread-safe, unele dispozitive de sincronizare aleatorii trebuie să fie utilizate, de exemplu, pentru accesul aleatoriu de la mai multe fluxuri; Pentru mai multe informații, a se vedea. Secțiunea de clase aleatorii și firul de siguranță mai devreme în această secțiune. Mai mult, mecanismul de întârziere poate fi utilizat, cum ar fi metoda sleep utilizată în exemplul anterior pentru a evita cazurile de mai mult de 15 milisecunde distanță.

Întregi în acest interval poate fi obținut prin apelarea În continuare (int32, int32), metoda care permite specificarea numărului limită inferioară și superioară, ar fi de dorit generator de numere aleatorii pentru o restituire. superioară Limita - exclusivă, nu inclusiv, valoarea. Asta este, nu este inclusă în intervalul de valori returnate de metoda. In exemplul de mai jos, această metodă este folosită pentru a genera numere întregi aleatoare de la -10 la 10. De notat că punctele de la 11, care este mai mare decât valoarea dorită ca valoarea unuia dintre argument MAXVALUE în apelul metodei.

NextBytes (Byte [], Byte, Byte) Metoda creează un shell pentru apelarea Următoarea metodă (int32, int32) și indică o valoare minimă și una mai mare decât valoarea maximă (în acest caz, cu 0 până la 101), trebuie să se întoarcă în matrice de octeți. Pentru că noi credem că valorile întregi returnate prin metoda următoare sunt în tipul de date gama Byte, le putem (în C #), aduce în condiții de siguranță sau de a converti (în Visual Basic) din numărul total de octeți.

Numerele aleatoare sunt adesea folosite ca indici pentru a prelua valorile din matrice sau de colectare. Pentru a prelua valoarea unui cod aleator, puteți apela la metoda următoare (int32, int32) și de a folosi limită inferioară de matrice ca valoare a argumentului MINVALUE sale și una mai mult decât valoarea limitelor superioare ale matrice ca valoarea argumentului său MAXVALUE. Șirul de plecare zero este echivalentă cu proprietatea sa lungime sau una mai mult decât valoarea returnată de Array. Metoda GetUpperBound. Exemplul următor este extras în mod aleatoriu un oraș din SUA dintr-o serie de orașe.