ProgBasics_lec08_interfaces
.pdfТипы данных
Тип данных определяет:
•допустимые значения
•допустимые действия над этими значениями
Виды типов данных
•Reference types (ссылочные типы)
–описывают собственно значение, и использовать их можно без ссылок на другие значения
–хранятся в куче (managed heap)
•Value types (значимые типы)
–описывают местоположения другого значения
–могут храниться на стеке
Виды типов данных с точки зрения C#
•Reference types
–Классы
•Object – базовый для всех типов
•String – sealed-класс, представляющий строку
–Массивы
–Интерфейсы
–Делегаты
–null
•Value types
–Build-in types (integer, floating-point, numeric, bool)
–Структуры
•Перечисления
value types
•не могут быть базовыми типами
•не могут принимать значение null
–см. также понятие nullable type
•память под структуру выделяется при объявлении переменной данного типа
•присваивание value-переменной, передача в качестве параметра в метод приводят к созданию копии значения
•наследники System.ValueType
Структуры
•объявление аналогично классу
•используется ключевое слово ‘struct’ public struct Point
{
public int x, y;
public Point(int x, int y)
{
this.x = x; this.y = y;
}
}
Структуры
• Нельзя объявлять конструктор по-умолчанию
public struct Point
{
public int x, y; public Point()
{
x = 0; y = 0;
}
}
Ошибка
компиляции
Структуры
• Все поля должны быть инициализированы в конструкторе public struct Point
{
public int x, y; public Point(int x)
{
this.x = x; y = 0;
}
}
Usage
• <visual studio sample>
Структуры или классы?
•Следует использовать структуры, если:
–объекты малы (в пределах 16 байт?)
–время жизни объектов довольно короткое
–объекты встраиваются в другие объекты
•вопрос к разработчику
–объект представляет одиночное значение,
например, int, double, Point, и т.д.
–объекты неизменяемы (immutable)
–объекты не пакуются (boxing) часто
•В других случаях - классы
Интерфейсы