Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 145
Текст из файла (страница 145)
Каждый байт в массиве будет находиться в пределах от 0 до вусе. Мвхув1ие-1 включительно риытс гггтва1 сотые нехспсиые () Возвращает из последовательности следующее случайное число, которое представлено в форме с плавающей точкой, больше или равно 0,0 и меньше 1,0 ргогескеп итгтва1 СоиЫе Яавр1е() Возвращает нз последовательности следующее случайное число, которое представлено в форме с плавающей точкой, больше или равно 0,0 и меньше 1,0. Для получения несимметричного или специального распределения случайных чисел этот метод необходимо переопределить в производном классе Ниже приведена программа, в которой применение класса Папг(ов демонстрируется на примере создания компьютерного варианта пары игральных костей.
// Компьютерный вариант пары игральных костей. свтпд Яувтев; с1авв Паппрьсе ( втат1с тстп Ма1п () Палг(ов гап = лен Вапг(ов() ССЛВС1Е.ИГ1СЕ(таП.НЕХС(1, 7) + " ") 7 Сспвс1е.нг1теьтпе (кап .Нехт (1, 7) ); ) 5 2 1 б При выполнении этой программы трн раза подряд могут быть получены, например, следующие результаты; 738 Часть П. Библиотека С№ Управление памятью и класс Ос В классе ас инкапсулируются средства "сборки мусора". Методы, определенные в этом классе, перечислены в табл. 21.15. Таблица 21.16. Методы, определенные в классе ас Метод Назначение риЫ1с ясас№с иосг)дсъ(нвиосугсвяяисе (1опд я№яе) Задает в качестве параметра язве количество байтов, распределенных в неуправляемой области памяти риЫ1с яквС№с иоя б Со11всС () Инициализирует процесс "сборки мусора" риЬ1№с якяС№с воя б Со11всС ().пс вяхйел) Инициализирует процесс "сборки мусора" в обла- стях памяти с номерами поколений от О до ияхавп риысс ясясгс иост( со11всс (ьпс инициализирует процесс "сборки мусора" в облатахавл, пссо11есссопмог)е бсмомв) стах памяти с номерами поколений от О до иахдеп в режиме, определяемом параметром асиос(в риЫ№с якаС1с №пС Со11всС№опСоипС (№пС дел) Возвращает количество операций "сборки мусора", выполненных в области памяти с номером поколе- ния дел риЫ№с всас№с №пс Сетпвпвгяи№оп (ЬЬбвсС о) Возвращает номер поколения для области памяти, адресуемой по "слабой" ссылке, задаваемой пара- метром о.
Наличие "слабой" ссылки не защищает объект от "сборки мусора" риЫ№с яквС№с 1опд Возвращает общий объем памяти (в байтах), выдеОестосв1меиоту(ьоо1 со11всс) ленной наданный момент. Если параметр со11есс имеет логическое значение сгие, то сначала выполняется "сборка мусора" риЫ№с яевС№с ионн кеврв1№ие (оьбвсс о) Создает ссылку на объект о, защищая его от "сборки мусора". Действие этой ссылки оканчивается после выполнения метода кеврл1№ие () риЬ11с ятяС№с иоя а Неиоиенеиокуггеяяисе(1опд язве) Задает в качестве параметра я№яе количество байтов, освобождаемых в неуправляемой области памяти Вызывает деструктор для объекта о.
Этот метод ан- нулирует действие метода зиррсея ягьпя1№яе () риЫ№с ятаС1с гоя б кеквдьясесгокгзпа1№яе (оЬбесс о) риЫ№с ясвс1с иосг) Яиррсеяяръля1№яв (ЬЬбесС о) Препятствует вызову деструктора для обьекта о риЬ№№с яиаС№с воя а Ивсктоггепг(спдрспа11яегя() Прекращает выполнение вызывающего потока до тех пор, пока не будут выполнены все вызванные и неза- вершенные деструкторы Кроме того, в классе ОС определяется следующее доступное только для чтения свойство: риЬ1№с яьяС№с хпС Мвхпепвкагьоп ( деС) ) Свойство МвхбепетаС№оп содержит максимальный номер поколения, доступный для системы. Номер поколения обозначает возраст выделенной области памяти. Чем старше Глава 2).
Пространство имен Яушев 739 Класс оЬ~ ест= Класс ЬЬ1есг положен в основу типа оЬ1есг в С(). Члены класса ОЬ1есг подробно рассматривались в главе 11, но поскольку он играет главную роль в С(т, то его методы повторно перечисляются в табл. 21.16 ради удобства.
В классе оьб есг определен конструктор риь11с ОЬ)ест()) который создает пустой объект. Таблица 21.1В. Методы, определенные а классе О)зчесг рчЫ1с ч1ггиа1 Ьоо1 ЕЧча1я(оЬбесг сш Возвращает логическое значение ггяе, если вы- зывающий обьекг оказывается таким же, как и ОбЬЕКГ, ОПрЕдЕЛяЕМЫй ПараМЕтрОМ сь. В ПрОМВ- ноы случае возвращается значение га1яе роЬ11с ягагьс Ьоо1 Ецпа1я(оЬбесг сЬ1, оЬ)ест ЬЬЕ) Возвращает ломческое значение ггпе, если объ- ект ЬЬ1 оказывается таким же, как и объект сЫ. В противном случае возвращается значение Га1яе ргогесгег) Ггпа11ге() Выполняетзавершающиедействия перед про- цессом "сборки мусора". В С» метод г1 па11 ке () доступен через деструктор выделенная область памяти, тем больше номер ее поколения.
Номера поколений позволяют повысить эффективность работы средств "сборки мусора". В большинстве приложений возможности класса ЕС не используются. Но в особых случаях они оказываются весьма полезными. Допустим, что требуется организовать принудительную "сборку мусора" с помощью метода Вс11есг () в выбранный момент времени. Как правило, "сборка мусора" происходит в моменты, не указываемые специально в программе.
А поскольку для ее выполнения требуется некоторое время, то желательно, чтобы она не происходила в тот момент, когда решается критичная по времени задача. С другой стороны, "сборку мусора" и другие вспомогательные операции можно произвести во время простоя программы. Для проектов с неуправляемь1м кодом особое значение имеют два следующих метода из класса ЬС: Аг(диевогургеяяцге () и Кевсчеиевсгургея яцге () .
С их помощью указывается большой объем неуправляемой памяти, выделяемой или освобождаемой в программе. Особое значение этих методов состоит в том, что система управления памятью не контролирует область неуправляемой памяти. Если программа выделяет большой объем неуправляемой памяти, то это может сказаться на производительности, поскольку системе ничего неизвестно о таком сокращении объема свободно доступной памяти. Если же большой объем неуправляемой памяти выделяется с помощью метода ))с)с)Мевоту рте я ям ге ( ), то система С) К уведомляется о сокрашении объема свободно доступной памяти. А если выделенная область памяти освобождается с помощью метода Кевочеиевогургея яцге (), то система СЕК уведомляется о соответствующем восстановлении объема свободно доступной памяти.
Следует, однако, иметь в виду, что метод Кевочеиевсгургеяяоге () необходимо вызывать только для уведомления об освобождении области неуправляемой памяти, выделенной с помощью метода Лс)с)Мевогургеяяцге () . 740 Часть П. Библиотека СЭ Окончание табл. 2(пб Назначение Метод риЫъс кугкиа1 1пк Оекнаапсог(е() Возвращает хеш-код, связанный с вызывающим объектом роЫТс туре аектуре() Получает тип объекта во время выполнения про- граммы ртокесквп оЬбеск ИеиЬвкньаес1опе() Создает "неполную" копию объекта. При этом ко- пируются члены, но не объекты, на которые ссыла- ются эти члены рпЫ1с асак1с Ьоо1 аетегепсевяпа1э(оЬбеск оЬ1, оЬ(ест оЬ2) Возвращает логическое значение ские, если объекты оы и оы ссылаются на один и тот ке объект.
В противном случае возвращается латме- ское значение гагае рпЫТС г1гкоа1 эккэпс Тоякг1пс( ) Возвращает строку, описывающую обьект Интерфейсы 1СотрагаЬ1е и ХСовратаЪ1е<Т> Во многих классах приходится реализовывать интерфейс 1СоюракаЫе или Тсоюракаые<Т>,поскольку он позволяет сравнивать один объект с другим, используя различные методы, определенные в среде .НЕТ Ггашетуог(с Интерфейсы Тсоюракаые и Тсоюрагаые<т> были представлены в главе 18, где они использовались в примерах программ для сравнения двух объектов, определяемых параметрами обобщенного типа.
Кроме того, они упоминались при рассмотрении класса актау ранее в этой главе. Но поскольку зти интерфейсы имеют особое значение и применяются во многих случаях, то ниже приводится их краткое описание. Интерфейс 1СоглрагаЬ1е реализуется чрезвычайно просто, потому что он состоит всего лишь из одного метода: 1пк Соирагето(оЬ)есС н) В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром щ Если значение вызывающего объекта больше, чем у объекта ш то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта ш — отрицательное значение. Обобщенный вариант интерфейса Тсоюракаые объявляется следующим образом: рпЫТс улке<тасе 1СоирагаЫе<т> В данном варианте тип сравниваемых данных передается параметру т в качестве аргумента типа.
В силу этого объявление метода союрагето () претерпевает изменения и выглядит так, как показано ниже. 1пк Соирагето(т оЬУ) В этом объявлении тип данных, которыми оперирует метод СоюракеТо ( ), может быть указан явным образом. Следовательно, интерфейс Тсоюракаые<Т> обеспечивает типовую безопасность. Именно по этой причине он теперь считается более предпочтительным в программировании на С(г, чем интерфейс Тсоюракаые. Глава 2). Пространство имен Зув(ел) 741 Интерфейс 1Еср~айаЬ1е<Т) Интерфейс 1кс(оасаЫе<т> реализуется в тех классах, где требуется определить порядок сравнения двух объектов на равенство их значений.
В этом интерфейсе определен только один метод, кс)на1з (), объявление которого приведено ниже. Ьоо1 КЧна1в(т оьу) Этот метод возврашает логическое значение ь сое, если значение вызывающего объекта оказывается равным значению объекта оЬт', в противном случае — логическое значение га15е. Интерфейс 1Ет)насеЫе<Т> реализуется в нескольких классах и структурах среды .)ь)ЕТ Егашечтог)г, включая структуры числовых типов, Ппаг, 1ПЬ32, Поо1еап и Яьг1по. Интерфейс 1Соаттех~хЬ1е Интерфейс 1сончеттьь1е реализуется в структурах всех типов значений, ягт1нп и ПагеТТве. В нем определяются различные преобразования типов.