Вход/Регистрация
Полное руководство. С# 4.0
вернуться

Шилдт Герберт

Шрифт:

Методы, определенные в классе Random, перечислены в табл. 21.14.

Таблица 21.14. Методы, определенные в классе Random Метод Назначение public virtual int Next Возвращает следующее случайное целое число, которое будет находиться в пределах от 0 до Int32. MaxValue-1 включительно public virtual int Next(int maxValue) Возвращает следующее случайное целое число, которое будет находиться в пределах от 0 до maxValue-1 включительно public virtual int Next(int minValue, int maxValue) Возвращает следующее случайное целое число, которое будет находиться в пределах от minValue до maxValue-1 включительно public virtual void NextBytes(byte[] buffer) Заполняет массив buffer последовательностью случайных целых чисел. Каждый байт в массиве будет находиться в пределах от 0 до Byte.MaxValue-1 включительно public virtual double NextDouble Возвращает из последовательности следующее случайное число, которое представлено в форме с плавающей точкой, больше или равно 0,0 и меньше 1,0 protected virtual double Sample Возвращает из последовательности следующее случайное число, которое представлено в форме с плавающей точкой, больше или равно 0,0 и меньше 1,0. Для получения несимметричного или специального распределения случайных чисел этот метод необходимо переопределить в производном классе

Ниже приведена программа, в которой применение класса Random демонстрирует ся на примере создания компьютерного варианта пары игральных костей. // Компьютерный вариант пары игральных костей. using System; class RandDice { static void Main { Random ran = new Random; Console.Write(ran.Next(1, 7) + " "); Console.WriteLine(ran.Next(1, 7)); } }

При выполнении этой программы три раза подряд могут быть подучены, напри мер, следующие результаты. 5 2 4 4 1 6

Сначала в этой программе создается объект класса Random. А затем в ней запраши ваются два случайных значения в пределах от 1 до 6. Управление памятью и класс GC

В классе GC инкапсулируются средства "сборки мусора". Методы, определенные в этом классе, перечислены в табл. 21.15.

Таблица 21.15. Методы, определенные в классе GC Метод Назначение public static voidAddMemoryPressure(long bytesAllocated) Задает в качестве,параметра bytesAllocatedколичество байтов, распределенных в неуправляемой,области памяти public static void CancelFullGCNotification Отменяет,уведомление о “сборке мусора” public static void Collect Инициализирует процесс “сборки мусора” public static void Collect(int generation) Инициализирует,процесс “сборки мусора” в областях памяти с номерами поколений от 0 до,generation public static void Collect(int generation, GCCollectionMode mode) Инициализирует,процесс "сборки мусора" в областях памяти с номерами поколений от 0,до generation в режиме, определяемом параметром mode public static int CollectionCount(int generation) Возвращает,количество операций “сборки мусора”, выполненных в области памяти с номером,поколения generation public static int GetGeneration(object obj) Возвращает номером,поколения для области памяти, доступной по ссылке obj,td> public static int GetGeneration(WeakReference wo) Возвращает номер,поколения для области памяти, доступной по "слабой” ссылке, задаваемой,параметром wo. Наличие "слабой” ссылки не защищает объект от “сборки,мусора” public static long GetTotalMemory(bool forceFullCollection) Возвращает общий,объем памяти (в байтах), выделенной на данный момент. Если параметр,forceFullCollection имеет логическое значение true, то сначала выполняется,“сборка мусора” public static void KeepAlive(object obj) Создает ссылку на,объект obj, защищая его от “сборки мусора”. Действие этой ссылки оканчивается, после выполнения метода KeepAlive public static void Regist erForFullGCNotification(int maxGenerationThreshold, int largeObjectHeapThreshold) Разрешает,уведомление о "сборке мусора”. Значение параметра maxGenerationThreshold,обозначает количество объектов второго поколения в обычной “куче”, которые,будут инициировать уведомление. А значение параметра largeObjectHeapThreshold,обозначает количество объектов в крупной “куче”, которые будут инициировать,уведомление. Оба значения должны быть указаны в пределах от 1 до 99 public static void RemoveMemoryPressure(long bytesAllocated) Задает в качестве,параметра bytesAllocated количество байтов, освобождаемых в неуправляемой,области памяти public static void ReRegisterForFinalize(object obj) Вызывает деструктор,для объекта obj. Этот метод аннулирует действие метода SuppressFinalize public static void SuppressFinalize(object obj) Препятствует вызову,деструктора для объекта obj public static GCNotificationStatus WaitForFullGCApproach Ожидает уведомления,о том, что должен произойти полный цикл “сборки мусора”. Здесь,GCNotificationStatus — перечисление, определенное в пространстве имен System public static GCNotificationStatus WaitForFullGCApproach(int milliseconds Timeout) Ожидает уведомления,о том, что должен произойти полный цикл “сборки мусора”, в течение времени,,задаваемого параметром millisecondsTimeout. Здесь GCNotificationStatus — перечисление, определенное в пространстве имен System public static GCNotificationStatus WaitForFullGCComplete Ожидает уведомления,о завершении полного цикла “сборки мусора”. Здесь GCNotificationStatus —,перечисление, определенное в пространстве имен System public static GCNotificationStatus WaitForFullGCComplete(int milliseconds Timeout) Ожидает уведомления,о завершении полного цикла "сборки мусора” в течение времени,,задаваемого параметром millisecondsTimeout. Здесь GCNotif icationStatus — перечисление, определенное в пространстве имен System public static void WaitForPendingFinalizers Прекращает выполнение вызывающего потока до тех пор, пока не будут выполнены все вызванные и незавершенные деструкторы

Кроме того, в классе GC определяется следующее доступное только для чтения свойство: public static int MaxGeneration { get; }

Свойство MaxGeneration содержит максимальный номер поколения, доступный для системы. Номер поколения обозначает возраст выделенной области памяти. Чем старше выделенная область памяти, тем больше номер ее поколения. Номера поколе ний позволяют повысить эффективность работы системы "сборки мусора".

В большинстве приложений возможности класса GC не используются. Но в особых случаях они оказываются весьма полезными. Допустим, что требуется организовать принудительную "сборку мусора" с помощью метода Collect в выбранный мо мент времени. Как правило, "сборка мусора" происходит в моменты, не указываемые специально в программе. А поскольку для ее выполнения требуется некоторое время, то желательно, чтобы она не происходила в тот момент, когда решается критичная по времени задача. С другой стороны, "сборку мусора" и другие вспомогательные опе рации можно выполнить во время простоя программы. Имеется также возможность регистрировать уведомления о приближении и завершении "сборки мусора".

Для проектов с неуправляемым кодом особое значение имеют два следующих мето да из класса GC:AddMemoryPressure и RemoveMemoryPressure. С их помощью указывается большой объем неуправляемой памяти, выделяемой или освобождаемой в программе. Особое значение этих методов состоит в том, что система управления памятью не контролирует область неуправляемой памяти. Если программа выделя ет большой объем неуправляемой памяти, то это может сказаться на производитель ности, поскольку системе ничего неизвестно о таком сокращении объема свободно доступной памяти. Если же большой объем неуправляемой памяти выделяется с по мощью метода AddMemoryPressure, то система CLR уведомляется о сокращении объема свободно доступной памяти. А если выделенная область памяти освобождает ся с помощью метода RemoveMemoryPressure, то система CLR уведомляется о со ответствующем восстановлении объема свободно доступной памяти. Следует, однако, иметь в виду, что метод RemoveMemoryPressure необходимо вызывать только для уведомления об освобождении области неуправляемой памяти, выделенной с помо щью метода AddMemoryPressure. Класс object

В основу типа object в С# положен класс object. Члены класса Object под робно рассматривались в главе 11, но поскольку он играет главную роль в С#, то его методы ради удобства повторно перечисляются в табл. 21.16. В классе object определен конструктор public Object

который создает пустой объект.

Таблица 21.16. Методы, определенные в классе Object Класс Tuple

В версии .NET Framework 4.0 внедрен удобный способ создания групп объектов (так называемых кортежей). В основу этого способа положен статический класс Tuple, в котором определяется несколько вариантов метода Create для создания корте жей, а также различные обобщенные классы типа Tuple<...>, в которых инкапсу лируются кортежи. В качестве примера ниже приведено объявление варианта метода Create, возвращающего кортеж с тремя членами. Метод Назначение public virtual bool Equals(object obj) Возвращает логическое значение true, если вызывающий объект оказывается таким же, как и объект, определяемый параметром obj. В противном случае возвращается значение false public static bool Equals(object objA, object objВ) Возвращает логическое значение true, если объект objА оказывается таким же, как и объект objВ. В противном случае возвращается значение false protected Finalize Выполняет завершающие действия перед процессом "сборки мусора". В C# метод Finalize доступен через деструктор public virtual int GetHashCode Возвращает хеш-код, связанный с вызывающим объектом public Type GetType Получает тип объекта во время выполнения программы protected object MemberwiseClone Создает "неполную" копию объекта. При этом копируются члены, но не объекты, на которые ссылаются эти члены public static bool ReferenceEquals(object objA, object objВ) Возвращает логическое значение true, если объекты objА и objВ ссылаются на один и тот же объект. В противном случае возвращается логическое значение false public virtual string ToString Возвращает строку, описывающую объект public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3)` Следует заметить, что данный метод возвращает объект типа Tuple<T1, Т2, Т3>, в котором инкапсулируются члены кортежа item1, item2 и item3. Вообще говоря, кортежи оказываются полезными в том случае, если группу значений нужно интерпретировать как единое целое. В частности, кортежи можно передавать методам, возвращать из методов или же сохранять в коллекции либо в массиве. Интерфейсы IComparable и IComparable

Во многих классах приходится реализовывать интерфейс IComparable или IComparable, поскольку он позволяет сравнивать один объект с другим, используя различные методы, определенные в среде .NET Framework. Интерфейсы IComparable и IComparable были представлены в главе 18, где они использовались в примерах программ для сравнения двух объектов, определяемых параметрами обобщенного типа. Кроме того, они упоминались при рассмотрении класса Array ранее в этой гла ве. Но поскольку эти интерфейсы имеют особое значение и применяются во многих случаях, то ниже приводится их краткое описание.

Интерфейс IComparable реализуется чрезвычайно просто, потому что он состоит всего лишь из одного метода. int CompareTo(object obj)

В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром obj. Если значение вызывающего объекта больше, чем у объекта obj, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта obj, — отрицательное значение.

Обобщенный вариант интерфейса IComparable объявляется следующим об разом. public interface IComparable<T>

  • Читать дальше
  • 1
  • ...
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: