Типы данных и переменные
Как и во многих языках программирования, в C# есть своя система типов данных, которая используется для создания переменных. Она представлена следующими типами:
bool: хранит значение
true
илиfalse
. Представлен системным типомSystem.Boolean
byte: хранит целое число от
0
до255
и занимает 1 байт. Представлен системным типомSystem.Byte
sbyte: хранит целое число от
-128
до127
и занимает 1 байт. Представлен системным типомSystem.SByte
short: хранит целое число от
-32768
до32767
и занимает 2 байта. Представлен системным типомSystem.Int16
ushort: хранит целое число от
0
до65535
и занимает 2 байта. Представлен системным типомSystem.UInt16
int: хранит целое число от
-2147483648
до2147483647
и занимает 4 байта. Представлен системным типомSystem.Int32
uint: хранит целое число от
0
до4294967295
и занимает 4 байта. Представлен системным типомSystem.UInt32
long: хранит целое число от
–9 223 372 036 854 775 808
до9 223 372 036 854 775 807
и занимает 8 байт. Представлен системным типомSystem.Int64
ulong: хранит целое число от
0
до18 446 744 073 709 551 615
и занимает 8 байт. Представлен системным типомSystem.UInt64
float: хранит число с плавающей точкой от
-3.4*1038
до3.4*1038
и занимает 4 байта. Представлен системным типомSystem.Single
double: хранит число с плавающей точкой от
±5.0*10324
до±1.7*10308
и занимает 8 байта. Представлен системным типомSystem.Double
decimal: хранит десятичное дробное число. Если употребляется без десятичной запятой, имеет значение от 0 до +/–79 228 162 514 264 337 593 543 950 335; если с запятой, то от 0 до +/–7,9228162514264337593543950335 с 28 разрядами после запятой и занимает 16 байт. Представлен системным типом
System.Decimal
char: хранит одиночный символ в кодировке
Unicode
и занимает 2 байта. Представлен системным типомSystem.Char
string: хранит набор символов
Unicode
. Представлен системным типомSystem.String
object: может хранить значение любого типа данных и занимает 4 байта на 32-разрядной платформе и 8 байт на 64-разрядной платформе. Представлен системным типом
System.Object
, который является базовым для всех других типов и классов .NET.
Объявление переменных
Общий способ объявления переменных следующий:тип_данных название_переменной
. Например,int x;
. В этом выражении мы объявляем переменную x типаint
. То есть x будет хранить некоторое число не больше 4 байт.
В качестве имени переменной может выступать любое произвольное название, которое удовлетворяет следующим требованиям:
имя должно содержать не более 255 символов
имя может содержать любые цифры, буквы и символ подчеркивания, при этом первый символ в имени должен быть буквой или символом подчеркивания
в имени не должно быть знаков пунктуации и пробелов
имя не может быть ключевым словом языка C#
Объявив переменную, мы можем тут же присвоить ей значение или инициализировать ее. Варианты объявления переменных:
Использование суффиксов
При присвоении значений надо иметь в виду следующую тонкость. При присвоении переменным типа float
и decimal
чисел с плавающей точкой, Visual Studio рассматривает все эти числа как значения типаdouble
. И чтобы конкретизировать, что данное значение должно рассматриваться какfloat
, нам надо использовать суффиксы (f
и m
соответственно для float
и decimal
):
Использование системных типов
Выше при перечислении всех базовых типов данных для каждого упоминался системный тип. Потому что название встроенного типа по сути представляет собой сокращенное обозначение системного типа. Например, следующие переменные будут эквивалентны по типу:
Неявная типизация
Ранее мы явным образом указывали тип переменных, например,int x;
. И компилятор при запуске уже знал, что x хранит целочисленное значение.
Однако мы можем использовать и модель неявной типизации:
Для неявной типизации вместо названия типа данных используется ключевое словоvar
. Затем уже при компиляции компилятор сам выводит тип данных исходя из присвоенного значения. В примере выше использовалось выражениеConsole.WriteLine(c.GetType().ToString());
, которое позволяет нам узнать выведенный тип переменной с. Так как по умолчанию все целочисленные значения рассматриваются как значения типаint
, то поэтому в итоге переменная c будет иметь типint
илиSystemInt32
Эти переменные подобны обычным, однако они имеют некоторые ограничения.
Во-первых, мы не можем сначала объявить неявно типизируемую переменную, а затем инициализировать:
Во-вторых, мы не можем указать в качестве значения неявно типизируемой переменнойnull
:
Так как значение null
, то компилятор не сможет вывести тип данных.
double или decimal
Из выше перечисленного списка типов данных очевидно, что если мы хотим использовать в программе числа до 256, то для из хранения мы можем использоват переменные типаbyte
. При использовании больших значений мы можем взять тип short, int, long
. То же самое для дробных чисел - для обычных дробных чисел можно взять тип float
, для очень больших дробных чисел - тип double
. Тип decimal
здесь стоит особняком в том плане, что несмотря на большую разрядность по сравнению с типом double
, тип double
может хранить большее значение. Однако значение decimal
может содержать до 28-29 знаков после запятой, тогда как значение типа double
- 15-16 знаков после запятой.
Decimal
чаще находит применение в финансовых вычислениях, тогда как double
- в математических операциях. Общие различия между этими двумя типами можно выразить следующей таблицей: