Главная страница Библиотека (скачать книги) Скачать софт Введение в программирование Стандарты для C++ Уроки по C# Уроки по Python HTML Веб-дизайн Ассемблер в среде Windows ActiveX Javascript Общее о Линукс Линукс - подробно Линукс - новое Delphi Паскаль для начинающих Турбопаскаль Новости Партнеры Наши предложения Архив новостей |
Структуры.В отличие от классов и структур в C++, структуры C# семантически отличны от классов. В данном разделе будет освещен ряд таких отличий (Некоторые отличия будут указаны в последующих уроках). Структурный типОсновное отличие заключается в том, что структуры являются структурными типами (value types). Напоминаем, что объекты ссылочных типов создаются в куче, а объекты структурного типа создаются в стеке. Это означает, что при копировании двух объектов структур друг другу, вы получите не две ссылки на одно значение (случай для объектов классов), а два независимых объекта с одинаковым содержимым. struct S { public int i; public S(int n) { i = n; } } class MainClass { static void Main() { S str = new S(76); Console.WriteLine(str.i); // 76 S str1 = str; // копируем объект str1.i = 77; Console.WriteLine(str.i); // 76 Console.WriteLine(str1.i); // 77 } } Объект структурного типа может присваиваться объекту типа object. В этом случае в куче создается временный объект, иммитирующий поведение ссылочного. В этот временный объект копируются данные из структурного, а сам объект помечается специальной отметкой о содержащемся в нем типе, чтобы тип объекта был известен среде. Этот процесс называется упаковкой (boxing), обратный процесс называется распаковкой (unboxing). int i1 = 111; object obj = i1; // упаковка int в object int i2 = (int) obj; // распаковка object в int (необходимо приводиться) Поля и методы структурПоля (нестатические) структур не могут инициализироваться при объявлении. struct S { public int i = 0; // Ошибка } Для структур запрещено объявление конструктора по умолчанию (его предоставляет среда). struct S { public int i; public S(int n) { i = n; } public S() // Ошибка { i = 0; } } Объекты структур можно создавать без использования оператора new, хотя при попытке его немедленного использования компилятор сообщит, что такое-то поле объекта неплохо бы проинициализировать. struct S { public int i; public S(int n) { i = n; } } class MainClass { static void Main() { S str; // Console.WriteLine(str.i); - Ошибка, поле i не проинициализировано str.i = 77; Console.WriteLine(str.i); // 77 S str1 = new S();// Вызывается системный конструктор по умолчанию Console.WriteLine(str1.i); // 0 } }****** Структура не может иметь деструктор. ****** |
|
Библиотека программиста. 2009. |
|