Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инфа теория передел.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
447.59 Кб
Скачать

2. Типы данных

Любые данные, т.е. константы, переменные, значения функций или выражения, характеризуются своими типами. Тип определяет множество допустимых значений, которые может тот или иной объект, а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет формат внутреннего представления данных в памяти ПК.

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

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

Правила, исходя из которых предпочтительнее создавать значимы тип:

1. Если тип ведет себя как элементарный 2. Тип не нуждается в любом другом типе в качестве базового 3. Не предполагается создание производных типов Так же следует создавать значимы типы, когда предполагается, что объект будет мал (до 20 байт ), либо больше, но тогда он не должен передаваться в качестве параметра.

Значимые типы делятся в свою очередь на:

1.Встроенные типы-Это самые простые величины, из которых составляют все производные типы, в том числе и классы. Различные реализации и компиляторы могут определять различные диапазоны значений целых и вещественных чисел.(double, byte, int, char, float)

2.Перечислимые-это сборка необходимых нам символов.

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

Вот пример:

struct fleshka {     int color;    int volume;    public int fleshka(int _color, int _volume)    { color = _color;  volume =_volume;  } }

Типы значений: целочисленные типы, типы с плавающей запятой, логический тип, символы, десятичный тип

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

Переменные ссылочных типов хранят лишь ссылку на адрес в памяти, по которому хранится значение (объект). Экземпляры ссылочных типов располагаются в куче (за исключением случая когда речь идет о указателях). Ссылочные типы делятся на самоописывающиеся типы, указатели и интерфейсы. Тип ссылочного типа может быть определен по значению самоописывающего типа. Самоописывающие типы делятся на массивы и классы. Классы в свою очередь делятся на пользовательские классы, упаковочные (boxed) значимые типы и делегаты.

Ниже выделяется значение ссылочного типа (string), но при этом «за кулисами» в куче выделяется значение и возвращается ссылка на него:

string s = "Hello,World";

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

1.Типы-значения (value), или значимые типы. 2.Ссылочные (reference). 3.Указатели (pointer). 4.Тип void.

Эта классификация основана на том, где и как хранятся значения типов. Для ссылочного типа значение задает ссылку на область памяти в "куче", где расположен соответствующий объект. Для значимого типа используется прямая адресация, значение хранит собственно данные, и память для них отводится, как правило, в стеке. В отдельную категорию выделены указатели, что подчеркивает их особую роль в языке. Указатели имеют ограниченную область действия и могут использоваться только в небезопасных блоках, помеченных как unsafe. Особый статус имеет и тип void, указывающий на отсутствие какого-либо значения. System.Object

Ниже перечислены все методы данного класса:

ToString()-возвращает символьную строку, содержащую описание того объекта, для которого он вызывается. GetHashCode()-используется, когда объект помещается в структуру данных, известную как карта (map) Equals() и ReferenceEquals()-он определяет, являются ли обе ссылки одинаковыми. GetType()-возвращает экземпляр класса, унаследованный от System.Туре. Clone()-создает копию объекта и возвращает ссылку на эту копию (а в случае типа значения — ссылку на упаковку). Finalize()-Используется, если объект владеет неуправляемыми ресурсами, которые нужно освободить при его уничтожении.

Неопределенный тип var

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

Пример:

var myWord = “ThisIsMy String”; var myArr = {13, 12, 53, 34, 75}

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

Неявно типизированные переменные предназначены для особых случаев, и самый примечательный из них имеет отношение к языку интегрированных запросов (LINQ).

Nullable типы данных

Они могут принимать, кроме собственно значений соотвествующего типа, значение null. 

Пример объявления: Nullable n;  = null; 

явное преобразование:

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

int X; int Y = 200; char C = 30; X = (int)C * 10 + Y; //переменная С приведена к типу int.

Неявное:Само приведение происходит как во время присваивания значения переменной, так и при операциях сравнения, вычисления выражения. При использовании в выражении несколько различных типов значения одного или нескольких подтипов может быть осуществлено преобразование к более общему типу (супертипу), с большим диапазоном возможных значений.

double d; // вещественный тип

long l; // целый тип

int i; // целый тип

if (d > i) d = i;

if (i > l) l = i;

if (d == l) d *= 2;

правило присвоения ссылочных переменных

когда одна переменная типа значения присваивается другой,переменная, находящаяся в левой части оператора присваивания, получает копию значения переменной, находящейся в правой части этого оператора.

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

Оператор as используется для выполнения определенных типов преобразований между совместимыми ссылочными типами

Оператор as выполняет только преобразования ссылок и упаковки-преобразования.Оператор as не может выполнять другие преобразования, например определенные пользователем, которые, в свою очередь, должны выполняться с помощью выражений приведения.

class Program

{ static void Main()

{ Derived d = new Derived()

Base b = d as Base;

if (b != null)

{ Console.WriteLine(b.ToString()); }

}

}

Ключевое слово is вызывает предупреждение во время компиляции, если известно, что выражение всегда будет иметь значение true или false, однако обычно оценивает совместимость типов во время выполнения.

Проверяет совместимость объекта с заданным типом. Например, в следующем коде определяется, является ли объект экземпляром типа MyObject или типа, производного от MyObject:

if (obj is MyObject)

{…}