
2. Программирование на языке CSharp.pptx
- Количество слайдов: 23
Программирование на языке C# Лекция № 2. • Типы данных • Семантика присваивания • Упаковка и распаковка типов
Вспоминаем… Класс - … Объект - … Встроенные типы Пользовательские типы Статические типы Динамические типы Значимые типы (развернутые) Ссылочные типы x: integer; x: ^integer; int x; int * x; x* = 25; x = 25; Стек: Куча: 25 $AA 00 FFB 7 0 25 0 {ОЗУ} {1 МБ}
Типы данных Система типов языка C# включает следующие категории: • Типы значений (Value Types) • Ссылочные типы (Reference Types) • Типы указателей (Pointer Types)
Типы значений состоят из двух основных категорий: • Структуры • Перечисления Структуры делятся на следующие категории: • Числовые типы – Целочисленные типы – Типы с плавающей запятой – decimal • bool • Пользовательские структуры.
Типы значений -> Структуры Тип struct — это тип значения, который обычно используется для инкапсуляции небольших групп связанных переменных, например координат прямоугольника или характеристик складской номенклатуры. В следующем примере показано простое объявление типа struct: public struct Book { public decimal price; public string title; public string author; }
Типы значений -> Перечисления Ключевое слово enum используется для объявления перечисления, отдельного типа, состоящего из набора именованных констант, который называется списком перечислителя. enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
Типы значений -> Целочисленные типы Тип Range Size sbyte char short ushort int uint long От -128 до 127 8 От 0 до 255 8 От U+0000 до U+ffff 16 От -32 768 до 32 767 16 От 0 до 65 535 16 От -2 147 483 648 до 2 147 483 647 32 От 0 до 4 294 967 295 32 От -9, 223, 372, 036, 854, 775, 808 до 9, 223, 372, 036, 854, 775, 807 64 ulong От 0 до 18 446 744 073 709 551 615 64
Типы значений -> С плавающей запятой -> decimal Тип Приблизительный диапазон Точность float От ± 1, 5 e− 45 до ± 3, 4 e 38 7 знаков double От ± 5, 0 e− 324 до ± 1, 7 e 308 15 -16 знаков Тип decimal Приблизительный диапазон (от -7, 9 x 1028 до 7, 9 x 1028) / (100– 28) Точность 28 -29 значимых цифр
Типы значений -> bool • Ключевое слово bool является псевдонимом свойства System. Boolean. Оно используется для объявления переменных для хранения логических значений, true и false.
Ссылочные типы • • • Ключевые слова, используемые для объявления ссылочных типов: class interface delegate встроенные ссылочные типы: dynamic object string
Ссылочные типы -> class Классы объявляются с помощью ключевого слова class: class Test. Class { // Methods, properties, fields, events, // delegates // and nested classes go here. }
Ссылочные типы -> string Тип string представляет последовательность из нуля или более символов в кодировке Юникод Несмотря на то, что тип string является ссылочным типом, операторы равенства (== и !=) определены для сравнения значений объектов типа string, а не ссылок. Это упрощает проверку равенства строк. Пример. string a = "hello"; string b = "h"; // Append to contents of 'b' b += "ello"; Console. Write. Line(a == b); Console. Write. Line((object)a == (object)b);
Ссылочные типы -> object • Тип object представляет собой псевдоним для Object в платформе. NET Framework. В унифицированной системе типов C# все типы, предопределенные и пользовательские, ссылочные типы и типы значений, наследуют непосредственно или косвенно от Object. • Переменным типа object можно назначать значения любых типов. • Когда переменная типа значения преобразуется в объект, говорят, что она упаковывается. • Когда переменная типа object преобразуется в тип значения, говорят, что она распаковывается
Типы указателей • В небезопасном контексте тип может быть типом указателя, типом значения или ссылочным типом. Объявления типа указателя выполняется одним из следующих способов: type* identifier; void* identifier; //allowed but not recommended Любой из следующих типов может быть типом указателя. • sbyte, short, ushort, int, uint, long, ulong, char, float, double, decimal или bool. • Любой тип enum. • Любой тип указателя. • Любой пользовательский тип структуры, содержащий поля только неуправляемых типов.
Типы или классы? ! • Все типы - встроенные и пользовательские - одновременно являются классами, связанными отношением наследования. • Родительским, базовым классом является класс Object. Все остальные типы или, точнее, классы являются его потомками, наследуя методы этого класса. У класса Object есть четыре наследуемых метода: • bool Equals (object obj) - проверяет эквивалентность текущего объекта и объекта, переданного вкачестве аргумента; • System. Type Get. Type () - возвращает системный тип текущего объекта; • string To. String () - возвращает строку, связанную с объектом. Для арифметических типов возвращается значение, преобразованное в строку; • int Get. Hash. Code() - служит как хэш-функция в соответствующих алгоритмах поиска по ключу при хранении данных в хэш-таблицах.
Пример int x=11; int v = new Int 32(); v = 007; string s 1 = "Agent"; s 1 = s 1 + v. To. String() +x. To. String();
Семантика присваивания • Рассмотрим присваивание: x = e Чтобы присваивание было допустимым, типы переменной x и выражения e должны быть согласованными. Определение: тип T 1 согласован по присваиванию с базовым типом T переменной x, если класс T 1 является потомком класса T.
Наследование и присваивание Наследование T 1 T 2 Присваивание = t 2 Класс-потомок при Родительский класс не имеет t 1 Объекту класса-потомка не Объекту родительского возможности создании наследует все может быть присвоен класса присваивается объект наследовать свойства и методы родителя. объект родительского класса-потомка методы, создаваемые класса его потомками. Присваивание - это ДОПУСТИМО!!! односторонняя операция от потомка к родителю !!!
Семантика присваивания. Преобразования между ссылочными и значимыми типами • На дом
Упаковка-преобразование и распаковка-преобразование • Упаковка-преобразование представляет собой процесс преобразования типа значения в тип object или любой другой тип интерфейса, реализуемый этим типом значения. Упаковка-преобразование: int i = 123; object o = (object)i; Распаковка-преобразование: o = 123; i = (int)o; // unboxing // boxing
А что творится в памяти? • Упаковка-преобразование int i = 123; object o = i; // Implicit boxing
А что в памяти? • Распаковка-преобразование int i = 123; // a value type object o = i; // boxing int j = (int)o; // unboxing
Литература и источники 1. В. А. Биллиг. Основы программирования на C# 2. http: //www. intuit. ru/department/pl/csharp/ 3. Герберт Шилдт. Полное руководство C# 4. 0 4. http: //msdn. microsoft. com/ruru/library/67 ef 8 sbd. aspx