Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ссылочные типы




Типы значений

Объявление переменной: int myInteger;

Эта команда заставляет исполняющую среду выделить память, необходимую для хранения целочисленной переменной, но не присваивает ей значение. Для определения значений переменных используется оператор присваивания: myInteger = 42;

При желании можно инициализировать переменную при ее объявлении: int myInteger = 42;

 

Экземпляры ссылочных типов создаются в два этапа. Вначале объявляется переменная требуемого типа. При этом выделяется память, необходимая для хранения данной переменной, но сам объект пока не создается. Синтаксис объявления объектов: System.Windows.Forms.Form myForm;

Исполняющая среда выделяет необходимый объем памяти под переменную, которая в данном примере представляет форму, присваивает этой переменной имя myForm, но пока не создает в памяти реальный объект формы.

Собственно объект создается в ходе второго этапа, называемого созданием экземпляра (instantiation), например:

myForm = new System.Windows.Forms.Form ();

Ключевое слово new, вызывает конструктор типа System.Windows Forms.

Конструктор — это специальный метод, вызываемый только в начале жизни объекта и содержащий код, который необходимо исполнить, чтобы получить работоспособный объект. Этот код способен, например, назначать свойствам объекта начальные значения. Любые параметры, необходимые конструктору, указываются в скобках в конце строки.

Пример объявления и создания экземпляра класса Widget, конструктор которого требует передать ему в качестве параметра строку.

Example ob;

ob = new Example ("Строка, требуемая конструктором");

 

Можно объявить объект и создать его экземпляр в одной и той же строке. При этом выделяется память под объект, и в зарезервированной памяти тотчас создается экземпляр объекта

System.Windows.Forms.Form myForm = new System.Windows.Forms.Form();

 

Любые переменные (и ссылочных типов, и с типами значения) необходимо инициализировать перед использованием. Поля классов и структуры инициализируются значениями по умолчанию при объявлении. В С# переменные по умолчанию инициализируются значением null, однако любая попытка использования неинициализированной переменной с классами и методами закончится ошибкой.

Переменная, объявленная с типом значения, содержит все данные, которые представляет этот тип, тогда как переменная ссылочного типа содержит ссылку на некоторый объект - это принципиальное отличие между типами значения и ссылочными типами.

Пример

int х, у;

х= 15;

y = х;

х = 30; // Каково значение у?

Здесь создаются две целочисленные переменные: х и у. Переменной х присваивается значение 15, после чего ее значение присваивается переменной у. В завершение х присваивается значение 30. А каково значение у? Ответ кажется очевидным: 15. Так как х и у — разные переменные, модификация одной из них никак не влияет на другую. При исполнении команды у=х значение переменной х копируется в у, между этими переменными больше нет никакой связи.

Со ссылочными типами все иначе.

Пример использующий переменные ссылочного типа (Form) вместо типа значения:

System.Windows.Forms.Form x,y;

x = new System.Windows.Forms.Form();

x.Text = "This is Form 1";

y = x;

x.Text = "This is Form 2"; // Какое значение вернет y.Text?

Поскольку System.Windows.Forms.Form - это ссылочный тип, переменная х не содержит форму, в действительности она хранит лишь ссылку на экземпляр формы. При исполнении команды х=у исполняющая среда копирует эту ссылку из х в у, после чего переменная у ссылается на тот же экземпляр формы, что и переменная х. Поскольку обе переменные ссылаются на один и тот же экземпляр объекта, они возвращают одинаковые значения свойств объекта, который они представляют, то есть y.Text вернет «This is Form 2».

Системные типы данных и псевдонимы С#

Любой встроенный тип данных С# - это всего лишь псевдоним для существующего типа, определенного в пространстве имен System. В табл. перечислены все системные типы данных, соответствующие им псевдонимы С#, а также информация о совместимости данных типов с CLS.

 

Псевдоним С# Соответствие CLS Системное имя Назначение
Byte Да Byte Беззнаковое 8-битовое число (от 0 до 255)
Sbyte Нет Sbyte Знаковое 8-битовое число (от -128 до 127)
Short Да Int16 Знаковое 16-битовое число
Int Да Int32 Знаковое 32-битовое число
Long Да Int64 Знаковое 64-битовое число
ushort Нет UInt16 Беззнаковое 16-битовое число
Uint Нет Ulnt32 Беззнаковое 32-битовое число
Ulong Нет Ulnt64 Беззнаковое 64-битовое число
Float Да Single 32-битовое значение с плавающей запятой
double Да Double 64-битовое значение с плавающей запятой
object Да Object Класс, базовый для всех типов в.NET
Char Да Char Один 16-битовый символ Unicode
String Да String Представляет набор символов Unicode
decimal Да Decimal 96-битовое знаковое значение
Bool Да Boolean Представляет «истину» или «ложь» (true или false)

 

Отношения между основными системными типами представлены на рис. 3.1. все типы происходят от System.Оbject.

 

Только часть типов С# является CLS-совместимой. Если создаются типы, которые будут использоваться в многоязыковой среде, желательно ограничиться лишь СLS-совместимыми типами. Достаточно принять за правило не использовать беззнаковые типы в определениях любых открытых членов типов. Этим гарантируется, что ваши классы, интерфейсы и структуры смогут нормально работать с любым языком.NET.

Большинство встроенных типов данных С# являются производными от типа System.ValueType. Единственное назначение этого типа - замещение некоторых методов, определенных в System.Object, таким образом, чтобы они могли нормально работать со структурными типами.

 

 

Рис. 3.1. Иерархия системных типов.

 

У каждого системного типа данных (к примеру, Int32, Char, Boolean и т. п.) есть схожий набор членов, которые могут оказаться весьма полезными. Рассмотрим свойства MaxValue и MinValue. Первое позволяет получить информацию о максимальном значении, для хранения которого можно использовать данный тип, а второе, соответственно - о минимальном.

Пример. Создали переменную типа System.UInt16 и выполняем операции с ней

// Работаем с UInt16 как со структурным типом

System.UInt16 х= 30000;

Console.WriteLine("Max for an UInt16 is: {0}", UInt16.MaxValue);

Console.WriteLine("Min for an UInt16 is: {0}", UInt16.MinValue);

Console.WriteLine("Your value is: {0}", x.ToString());

Console.WriteLine("I am a: {0}", x.GetType().ToString());

// Почти то же самое, но уже используем псевдоним С# ushort для типа System.Uint16

ushort у = 12000;

Console.WriteLine("\nYour value is: {0}", у.ToString());

Console.WriteLine("I am a: {0}", у.GetType().ToString());




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 415; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.