Клас случаен (система)

За да създадете тайни криптографски случайно число, например, подходящ за генериране на случайни парола, използвайте RNGCryptoServiceProvider клас или са получени от класовете System.Security.Cryptography. RandomNumberGenerator.

Създаване на модел на генератор на случайни числа, което позволява на началната стойност (първоначалната стойност за алгоритъм псевдо генератор на случайни числа) за Произволни клас конструктор. Можете да зададете начална стойност пряко или косвено:

Random (Int32) конструктор използва изрично първоначална стойност, трябва да посочите.

Random () конструктор използва часовника система за обозначаване на първоначалната стойност. Това е най-честият начин за създаване на копие на генератора на случайни числа.

Ако началната стойност се използва за различни случайни предмети, те ще получат една и съща последователност на случайни числа. Това може да бъде полезно да се създаде тестов пакет, който обработва произволни стойности, или да играят игри, които са получени данните си от случайни числа. Все пак, имайте предвид, че на случайни предмети по време на осъществяването на различни версии на в .NET Framework могат да се върнат различна последователност на случайни числа, дори и ако те могат да бъдат инстанция, без да е една и съща начална стойност.

За да се получат различни последователности на случайни числа, първоначалната стойност може да се направи в зависимост от времето, което позволява създаването на различни последователности за всеки нов случай на случаен принцип. Случайни параметризирана (Int32) конструктор може да отнеме Int32 стойност въз основа на броя на циклите в настоящия момент, докато строителя Random () конструктор използва часовника система за генериране на първоначалната стойност. Въпреки това, поради крайните размери на часовника, използвайки конструктор без параметри, за да се създадат различни случайни предмети в затворена последователност, генерирана генератори на случайни числа, които произвеждат идентични последователности на случайни числа. Следният пример показва как две случайни предмети, копия от които са създадени в бърза последователност, създават еднакви комплекта случайни числа. В повечето системи, Windows Случайни обекти, създадени в рамките на 15 милисекунди едно от друго, е вероятно да имат една и съща начална стойност.

Тя може да се изпълнява от наследява от случайни числа Случайни класа и предоставите алгоритъм за генериране на случайни числа. За да зададете персонализиран алгоритъм, трябва да замени метода на пробата, която реализира алгоритъма за генериране на случайни числа. Също така е необходимо да се определи отново следващата (). Следваща (Int32, Int32). NextBytes и методи, за да се гарантира, че те причиняват подтиснатия метод проба. Няма нужда да се наложи над Следващ (Int32) и NextDouble методи.

За пример, който се извлича от Random класа и промените по подразбиране генератор на случайни числа в страница за справка раздел Sample.

По-долу е код проба и обсъжда някои от начините, които можете да използвате произволен номер в заявлението.

Понякога искате да създадете една и съща последователност от случайни числа в сценарии за изпитване и игри. Изследване с една и съща последователност от случайни числа може да открие регресии и потвърждение на поправки. Използвайки същата последователност от случайни числа в игрите можете да играете предишните игри.

Можете да създадете една и съща последователност на случайни числа, който предоставя същата първоначална стойност за Random (Int32) конструктор. Първоначалната стойност включва първоначална стойност за алгоритъм произволен брой поколение. Следващият пример използва 100100 като произволна първоначална стойност, за да създадете произволен обект показва 20 случайни числа с плаваща запетая, и се съхраняват от първоначалната стойност. След това той се възстановява първоначалната стойност, генерира нов генератор на случайни числа, и показва същите стойности от 20 случайни числа с плаваща запетая. Имайте предвид, че може да даде пример различна последователност на случайни числа, когато работи на различни версии на .NET Framework.

Осигуряване на различни начални стойности за случаи на всеки клас призовава Произволни генератор на случайни числа за генериране на различна последователност от стойности. Изберете начална стойност или изрично, като се обадите Random (Int32) конструктор, или косвено чрез обаждане Random () конструктор. Повечето разработчици наричат ​​конструктора без параметри, която използва системния часовник. Следващият пример използва този подход, за да се създадат две Случайни случаи. Всяка например е показана серия от 10 случайни числа.

За да се избегне тази ситуация, се препоръчва да се създаде един екземпляр на Random обект, а не няколко сесии. Въпреки това, тъй като не, някои устройства за синхронизация Случайни конци-безопасно да бъдат използвани например за произволен достъп от множество потоци; За повече информация, вижте. Раздел на произволни класове и конец за безопасност по-рано в този раздел. Освен това механизмът за забавяне може да се използва като метод за заспиване, използвани в предишния пример, за да се избегнат случаите на повече от 15 милисекунди един от друг.

Целите числа в този диапазон могат да бъдат получени, като се обадите Next (Int32, Int32) метод, който позволява да се уточни долна и горна граница номер, би било желателно генератор на случайни числа за възстановяване. Горната граница - изключителен, не включително, стойността. Това означава, че не е включен в границите на стойностите, върнати от метода. В следващия пример, този метод се използва за генериране на случайни числа от -10 до 10 Забележка че да сочи до 11, която е по-голяма от желаната стойност като стойността на един от MAXVALUE аргумент в метод повикването.

NextBytes (байт [] Байт, Byte) метод създава обвивка за извикване метод Следваща (Int32, Int32), и показва минимална стойност, и една по-голяма от максималната стойност (в този случай 0-101), трябва да се върне в масива на байта. Защото ние вярваме, че стойностите на цели числа, върнати от Next метод са в типа данни гама Byte, спокойно можем да ги (в C #) въвеждат или да преобразувате (в Visual Basic) от общия брой байтове.

Случайни числа често се използват като показатели за извличане на стойностите от масива или събиране. За да извлечете стойността на случаен код, можете да извикате метода Next (Int32, Int32) и използването на по-ниска граница на масива като стойността на неговия аргумент MINVALUE и един още по-малка от стойността на горната граница на масива като стойността на неговия аргумент MAXVALUE. нулева база Масивът е еквивалентно на дължината му имущество или една по-малка от стойността, върната от масива. метод GetUpperBound. Следващият пример произволно извлича един град в САЩ от редица градове.