C# 4.0 полное руководство - 2011
Шрифт:
public static int MaxGeneration { get; }
Свойство MaxGeneration содержит максимальный номер поколения, доступный для системы. Номер поколения обозначает возраст выделенной области памяти. Чем старше выделенная область памяти, тем больше номер ее поколения. Номера поколений позволяют повысить эффективность работы системы " сборки мусора".
В большинстве приложений возможности класса GC не используются. Но в особых случаях они оказываются весьма полезными. Допустим, что требуется организовать принудительную "сборку мусора" с помощью метода Collect в выбранный момент времени. Как правило, "сборка мусора" происходит в моменты, не указываемые специально в программе.
Для проектов с неуправляемым кодом особое значение имеют два следующих метода из класса GC: AddMemoryPressure и RemoveMemoryPressure . С их помощью указывается большой объем неуправляемой памяти, выделяемой или освобождаемой в программе. Особое значение этих методов состоит в том, что система управления памятью не контролирует область неуправляемой памяти. Если программа выделяет большой объем неуправляемой памяти, то это может сказаться на производительности, поскольку системе ничего неизвестно о таком сокращении объема свободно доступной памяти. Если же большой объем неуправляемой памяти выделяется с помощью метода AddMemoryPressure , то система CLR уведомляется о сокращении объема свободно доступной памяти. А если выделенная область памяти освобождается с помощью метода RemoveMemoryPressure , то система CLR уведомляется о соответствующем восстановлении объема свободно доступной памяти. Следует, однако, иметь в виду, что метод RemoveMemoryPressure необходимо вызывать только для уведомления об освобождении области неуправляемой памяти, выделенной с помощью метода AddMemoryPressure .
Класс object
В основу типа object в C# положен класс object. Члены класса Object подробно рассматривались в главе 11, но поскольку он играет главную роль в С#, то его методы ради удобства повторно перечисляются в табл. 21.16. В классе object определен конструктор
public Object
который создает пустой объект.
Таблица 21.16. Методы, определенные в классе Object
Метод
Назначение
public virtual bool
Возвращает логическое значение true, если вы
Equals(object obj)
зывающий объект оказывается таким же, как и объект, определяемый параметром obj. В противном случае возвращается значение false
public static bool Equals(object
Возвращает логическое значение true, если
obj A, object objB)
объект obj А оказывается таким же, как и объект objB. В противном случае возвращается значение false
protected Finalize
Выполняет завершающие действия перед процессом “сборки мусора”. В C# метод Finalize доступен через деструктор
public virtual int
Возвращает хеш-код, связанный с вызывающим
GetHashCode
объектом
public Type GetTypeO
Получает
тип объекта во время выполнения программыprotected object
Создает “неполную” копию объекта. При этом ко
MemberwiseClone
пируются члены, но не объекты, на которые ссылаются эти члены
public static bool
Возвращает логическое значение true, если
ReferenceEquals(object objA,
объекты obj А и objB ссылаются на один и тот
object objB)
же объект. В противном случае возвращается логическое значение false
public virtual string
Возвращает строку, описывающую объект
ToString
Класс Tuple
В версии .NET Framework 4.0 внедрен удобный способ создания групп объектов (так называемых кортежей). В основу этого способа положен статический класс Tuple, в котором определяется несколько вариантов метода Create для создания кортежей, а также различные обобщенные классы типа Tuple<. . . >, в которых инкапсулируются кортежи. В качестве примера ниже приведено объявление варианта метода Create , возвращающего кортеж с тремя членами.
public static Tuple<Tl, T2, T3>
Create<Tl, Т2, Т3> (Tl iteml, Т2 item2, ТЗ item3)
Следует заметить, что данный метод возвращает объект типа Tuple<Tl, Т2, Т3>, в котором инкапсулируются члены кортежа iteml, item2 и item3. Вообще говоря, кортежи оказываются полезными в том случае, если группу значений нужно интерпретировать как единое целое. В частности, кортежи можно передавать методам, возвращать из методов или же сохранять в коллекции либо в массиве.
Интерфейсы IComparable и IComparable<T>
Во многих классах приходится реализовывать интерфейс IComparable или IComparable<T>, поскольку он позволяет сравнивать один объект с другим, используя различные методы, определенные в среде .NET Framework. Интерфейсы IComparable и IComparable<T> были представлены в главе 18, где они использовались в примерах программ для сравнения двух объектов, определяемых параметрами обобщенного типа. Кроме того, они упоминались при рассмотрении класса Array ранее в этой главе. Но поскольку эти интерфейсы имеют особое значение и применяются во многих случаях, то ниже приводится их краткое описание.
Интерфейс IComparable реализуется чрезвычайно просто, потому что он состоит всего лишь из одного метода.
int CompareTo(object obj) /
В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром obj. Если значение вызывающего объекта больше, чем у объекта obj, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта obj, — отрицательное значение.