КАТЕГОРИИ: Архитектура-(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.
Отношения между основными системными типами представлены на рис. 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; Просмотров: 443; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |