English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# базовый учебник

C# продвинутый учебник

C#面向对象(OOP)

Типы данных C#

C# является языком с сильной типизацией. Это означает, что我们必须 определить тип переменной, которая указывает на тип значения, которое будет храниться, например, целое число,浮-point, decimal, текст и т.д.

Ниже приведены примеры declarations и initialization различных типов данных.

string stringVar = "Hello World!!";
int intVar = 100;
float floatVar = 10.2f;
char charVar = 'A';
bool boolVar = true;

C# в основном разделяет типы данных на два типа: типы значений и типы ссылок. Типы значений включают простые типы (например, int, float, bool и char), типы枚ераций, типы структур и типы Nullable значений. Типы ссылок включают типы классов, типы интерфейсов, типы делегатов и типы массивов. В следующей главе более подробно рассмотрим типы значений и типы ссылок.

Предопределенные типы данных в C#

C# включает некоторые предопределенные типы значений и типы ссылок. В таблице ниже перечислены предопределенные типы данных:

Типописаниедиапазонсуффикс
byte8-битный беззнаковый целочисленный типот 0 до 255
sbyte8-битный целочисленный типот -128 до 127
short16-битный целочисленный типот -32 768 до 32 767
ushort 16-битный беззнаковый целочисленный типот 0 до 65 535
int32-битный целочисленный тип-2 147 483 648

до

2 147 483 647


uint32-битный беззнаковый целочисленный типот 0 до 4 294 967 295u
long64-битный целочисленный тип-9,223,372,036,854,775,808
до
9,223,372,036,854,775,807
l
ulong64-битный тип беззнакового целого0 до 18,446,744,073,709,551,615ul
float32-битный одинарный точностный тип с плавающей запятой-3.402823e38 до 3.402823e38f
double64-битный двойной точностный тип с плавающей запятой-1.79769313486232e308 до 1.79769313486232e308d
decimal128-битная точная десятичная величина, 28-29 значащих цифр(+ или-)1.0 x 10e-28 до 7.9 x 10e28m
char16-битный Unicode-символЛюбой.valid character, например a, *, \x0058 (hex), или\u0058 (Unicode)
bool8-битные логические значения true/falseTrue или False
objectБазовый класс всех типов

string

Unicode-символьная последовательность



DateTime表示日期和时间0:00:00am 1/1/01
до
11:59:59pm 12/31/9999

Как показано в таблице,每种数据类型 (исключая строки и объекты) содержит диапазон значений. Если значение выходит за пределы разрешенного диапазона типа данных, компилятор выдает ошибку. Например, диапазон типа данных int составляет от -2,147,483,648 до 2,147,483,647. Поэтому, если значение, назначенное для переменной, не находится в этом диапазоне, компилятор выдает ошибку.

    Пример: ошибка компиляции

// Ошибка компиляции: не удалось импlicitно преобразовать тип 'long' в 'int'.
int i = 21474836470;

Значения беззнаковых целых, типов long, float, double и decimal должны заканчиваться суффиксами u, l, f, d и m соответственно.

uint ui = 100u;
float fl = 10.2f;
long l = 45755452222222l;
ulong ul = 45755452222222ul;
double d = 11452222.555d;
decimal mon = 1000.15m;

Псевдоним и тип .NET

Предопределенные данные типы являются псевдонимами для имен классов типа .NET (CLR). В таблице приведены псевдонимы предопределенных типов данных и соответствующие имена классов .NET.

ПсевдонимТип .NETТип
byteSystem.Bytestruct
sbyteSystem.SBytestruct
intSystem.Int32struct
uintSystem.UInt32struct
shortSystem.Int16struct
ushortSystem.UInt16struct
longSystem.Int64struct
ulongSystem.UInt64struct
floatSystem.Singlestruct
doubleSystem.Doublestruct
charSystem.Charstruct
boolSystem.Booleanstruct
objectSystem.ObjectClass
stringSystem.StringClass
decimalSystem.Decimalstruct
DateTimeSystem.DateTimestruct

Это означает, что переменная одинакова, независимо от того, определена ли она как int или Int32.

int i = 345;
Int32 i = 345; // Тоже самое

Типовое преобразование

Значения некоторых типов данных автоматически преобразуются в другие типы данных в C#. Это называется неявным преобразованием.

int i = 345;
float f = i;
Console.WriteLine(f); // Вывод: 345

В приведенном выше примере значение переменной типа int i передается в переменную типа float f, так как это преобразование определено предварительно в C#.

Ниже приведена таблица неявного преобразования типов данных.

Неявное преобразованиеДо
sbyteshort, int, long, float, double, decimal
byteshort, ushort, int, uint, long, ulong, float, double, decimal
shortint, long, float, double или decimal
ushortint, uint, long, ulong, float, double или decimal
intlong, float, double или decimal.
uintlong, ulong, float, double или decimal
longfloat, double или decimal
ulongfloat, double или decimal
charushort, int, uint, long, ulong, float, double или decimal
floatDouble

Преобразование из int, uint, long или ulong в float, а также преобразование из long или ulong в double может привести к потере точности. Не существует неявного преобразования данных в тип char.

Но не все типы данных могут быть импlicitly преобразованы в другие типы данных. Например, тип int не может быть импlicitly преобразован в uint. Его необходимо явно指定, как показано ниже.

public static void Main()
{
    int i = 100;
    uint u = (uint) i;
    Console.Write(i);
}

В примере выше, целое число i явно преобразуется в uint в скобках (uint). Это преобразует целое число в uint.