Общая система типов CTS

Содержание

Слайд 2

CTS (общая система типов)

CTS (общая система типов) представляет собой формальную спецификацию,

CTS (общая система типов) CTS (общая система типов) представляет собой формальную спецификацию,
в которой описано то, как должны быть определены типы для того, чтобы они могли обслуживаться в CLR-среде.

Слайд 3

Тип Объект

Все объекты косвенно происходят от единого базового класса, определенного в составе

Тип Объект Все объекты косвенно происходят от единого базового класса, определенного в
CTS. Этот базовый класс — System.Object.

Слайд 4

Значимые и ссылочные типы

Концепция создания языка, где любая сущность является объектом, не

Значимые и ссылочные типы Концепция создания языка, где любая сущность является объектом,
нова. Если попытаться сложить два значения типа double, при этом реально выделять объекты в куче, то выделение памяти будет чрезвычайно неэффективно.

Слайд 5

Значимые типы

Для значимого типа используется прямая адресация, значение хранит собственно данные, и

Значимые типы Для значимого типа используется прямая адресация, значение хранит собственно данные,
память для них отводится, как правило, в стеке.

Слайд 6

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

Для ссылочного типа значение задает ссылку на область памяти в "куче",

Ссылочные типы Для ссылочного типа значение задает ссылку на область памяти в
где расположен соответствующий объект.

Слайд 7

Иерархия типов

Иерархия типов

Слайд 8

Встроенные типы

Пример:
bool IsTrue = false;

Встроенные типы Пример: bool IsTrue = false;

Слайд 9

Встроенные типы

Пример:
int a = 123;
long b,c,d;

Встроенные типы Пример: int a = 123; long b,c,d;

Слайд 10

Встроенные типы

Встроенные типы

Слайд 11

Встроенные типы

Пример:
object a = 123;

Встроенные типы Пример: object a = 123;

Слайд 12

Упаковка и распаковка

Как же эти различные категории типов обеспечивают более эффективную работу

Упаковка и распаковка Как же эти различные категории типов обеспечивают более эффективную
системы?
Это делается с помощью упаковки (boxing). В простейшем случае при упаковке размерный тип преобразуется в ссылочный. В обратном случае ссылочный тип распаковывается (unbox) в размерный.

Слайд 13

Упаковка и распаковка

Объект лишь тогда является объектом, когда это необходимо.
int foo =

Упаковка и распаковка Объект лишь тогда является объектом, когда это необходимо. int
42; // Размерный тип.
object bar = foo; // Переменная foo упакована в bar.
А теперь выполним явное приведение типов, чтобы преобразовать bar обратно в размерный тип:
int foo = 42; // Размерный тип.
object bar = foo; // Переменная foo упакована в bar.
int foo2 = (int) bar; // Распаковка и приведение к типу int.

Слайд 14

Тип Объект: открытые методы

Тип Объект: открытые методы

Слайд 15

Тип Объект: открытые методы

Тип Объект: открытые методы

Слайд 16

Тип Объект: защищенные методы

Тип Объект: защищенные методы

Слайд 17

Тип Объект: защищенные методы

Тип Объект: защищенные методы

Слайд 18

Приведение типов

Приведение типов – это преобразование значения одного типа в значение другого типа.

Приведение типов Приведение типов – это преобразование значения одного типа в значение другого типа.

Слайд 19

Приведение типов

Выделяют приведения типов:
явные (англ. explicit);
int num = 2147483647;
long bigNum = num;
неявные

Приведение типов Выделяют приведения типов: явные (англ. explicit); int num = 2147483647;
(англ. implicit).
double x = 1234.7;
int a;
a = (int)x; // a = 1234

Слайд 20

Приведение типов

class Employee { } 
class ContractEmployee : Employee { }
class CastExamplel
{
public static

Приведение типов class Employee { } class ContractEmployee : Employee { }
void Main () {
Employee e = new ContractEmployee(); } }
Этот код будет работать, поскольку всегда подразумевается восходящее приведение (upcast) производного класса к его базовому классу.

Слайд 21

Приведение типов

А вот такой код недопустим, так как компилятор не предоставляет неявное

Приведение типов А вот такой код недопустим, так как компилятор не предоставляет
нисходящее приведение (downcast).

class CastExample2 {
public static void Main ()
{
ContractEmployee ce = new Employee (); // He будет
// компилироваться.
} }

Слайд 22

Приведение типов

Вы не сможете выполнить нисходящее приведение объекта типа Employee к объекту

Приведение типов Вы не сможете выполнить нисходящее приведение объекта типа Employee к
типа ContractEmployee, поскольку нет гарантии, что этот объект поддерживает интерфейс, определенный классом ContractEmployee. Поэтому в случае нисходящего приведения используется явное приведение:
...
class CastExampleS {
public static void Main ()
{// Нисходящее приведение не сработает.
ContractEmployee ce = (ContractEmployee)new Employee(); }}
Имя файла: Общая-система-типов-CTS.pptx
Количество просмотров: 21
Количество скачиваний: 0