С#. Урок 1. Типы данных. Часть 1

Уроки для опытных   30 января 2013  Автор статьи:  

В данном уроке будут рассматриваться основные типы данных языка С#.

Все типы данных делятся на 2 больших категории: value (значимые) и reference (ссылочные). Приведем их основные характеристики:

Value Reference
Экземпляры типов размещаются в стеке. Память выделяется из управляемой кучи.
Хранятся до момента выхода точки исполнения за пределы видимости переменной. Объекты данного типа удаляются сборщиком мусора при отсутствии ссылок на них.

 

Для создания значимого типа достаточно написать, к примеру (int — целочисленный тип данных, будет рассмотрен немного ниже):

//объявление переменной
int x;
//инициализация переменной
x = 5;

Stack
Таким образом поле экземпляра размещается в самой переменной, а экземпляр в стеке. В случае ссылочных типов, в стеке хранится адрес ячейки динамической памяти, которая уже содержит объект с вполне конкретными значениями.

MyItem i = new MyItem();
i.x = 12;
i.y = 5;

Heap
Замечание: при использовании большого количества операции предпочтительнее использовать value типы, так как в reference мы тратим дополнительную память на хранения адреса, а также большее времени из-за перехода от «адреса к значению».

К простым значимым типам данных относятся:

  • Целочисленные

// int - 32-разрядное число со знаком (от -2 147 483 648 до 2 147 483 647)
int x = 1;
// byte - 8-разрядное число без знака (от 0 до 255)
byte y = 2;
// short - 16-разрядное значение со знаком (от -32768 до 32767)
short z = -33;
// long - 64-разрядное значение со знаком (от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807)
long a = 123123123123;

Также есть типы без знака, uint, ushort, ulong. Для byte — это sbyte, наоборот, число со знаком.

  • Вещественные

// double - 64-разрядное число с плавающей точкой
double x = 1.7E+3;
// float - 32-разрядное число с плавающей точкой
float y = 2.12;

  • Финансовый

// decimal - 128-разрядное число с плавающей точкой
decimal x = 9999999999234999999999;

  • Логический

// bool - булево значение (true или false)
bool isEmpty = false;

  • Символьный

// char - 16-разрядный символ Unicode
char symbol = "x";

К определяемым пользователям value-типам:

  • Структуры

// struct - тип значения, использующийся для инкапсуляции небольших групп связанных переменных
struct MyItem
{
int x = 1;
double y =2.3;
}

  • Перечисления

// enum - тип, состоящий из набора констант
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

  • Константы

// const - указатель на то, что значение не может быть изменено
const int x = 1;
// readonly - указатель на то, что поле является только полем для чтения
readonly int c = 34;

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

  • String

// string - последовательность символом Unicode
string alph = "abc";

  • Object

// object - исходный (базовый) тип, все типы наследуют от Object
object ob;
ob = 2;

  • Определяемые пользователем

class MyPoint
{
public int x;
public int y;
}

В следующем уроке будут рассмотрены различия между структурами и классами, nullable типы и dynamic.

  • Любитель печенек

    А печеньки за урок будут?

    • Конечно, а ты как думал=) У нас же здесь темная сторона… А если честно следите за нашими новостями и будет море самых крутых плюшек.

Научиться программировать

  • на Delphi

  • на Java

  • на C++