Полезная информация

Статьи IT

Всё для студента IT » Статьи » Программирование для Microsoft® .NET

Структуры .NET Framework

Классы понадобились для представления сложных типов данных. Поскольку экземпляры класса размещаются в управляемой куче, их создание и уничтожение связано с определенными издержками. Однако некоторые типы являются «простыми», и лучше помещать их в стек, на который не распространяется действие сборщика мусора и который обеспечивает более высокую производительность.

Примерами простых типов данных служат целые числа и байты. Именно поэтому в .NET Framework поддерживаются как ссылочные, так и размерные типы. В С++ размерные типы определяются ключевым словом struct. У размерных типов издержки меньше, чем у ссылочных, потому что они размещаются в стеке, а не в куче. К размерным типам относятся байты, целые и большинство других «элементарных» типов данных, поддерживаемых CLR.

Вот пример простого типа данных:
struct Point
{
public int x;
public int y;
public Point (int x, int y)
{
this.x = x;
this.у = v;
}
}

Point хранит координаты хну в полях, доступных клиентам напрямую. В нем также определен конструктор, позволяющий за одну операцию проводить создание экземпляра Point и его инициализацию. Создать экземпляр Point можно любым из следующих способов:
Point point = new Point (3, 4); // x==3, y==4
Point point = new Point (); // x==0, y==0
Point point; // x==0, y==0

Заметьте: хотя первые два оператора, казалось бы, создают объект Point в куче, реально этот объект помещается в стек. Если вы программировали на C++, забудьте о том, что new всегда выделяет память в куче. И еще. Хотя третий оператор создает объект Point, поля которого содержат нули, с точки зрения С#, этот экземпляр Point не инициализирован. Поэтому его нельзя использовать до тех пор, пока значения х и у не будут присвоены явно.

Размерным типам присущ ряд ограничений, не распространяемых на ссылочные типы. Размерные типы нельзя порождать из других типов, хотя неявно они образуются из System.ValueType и могут являться производными от интерфейсов (и зачастую являются). Кроме того, в них не должны содержаться неуправляемые ресурсы, такие как описатели файлов, поскольку они не смогут освободить эти ресурсы при уничтожении. Хотя размерные типы наследуют метод Finalize типа System,Object, этот метод никогда не вызывается, потому что сборщик мусора игнорирует объекты в стеке.

Похожие статьи:

Не нашли то, что Вам нужно?.. Найдите ответ на форуме!
Категория: Программирование для Microsoft® .NET | Добавил: Akron (12.02.2012)
Просмотров: 344 | Теги: .NET
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Сообщество
Помощь
Форма входа
Поиск

Студенческий помощник по информатике © 2024
При цитировании материалов данного сайта, обязательна ссылка на источник: ITstudents.ru



>