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

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Тип данных определяет то, каким образом будет представлена та или иная сущность (переменная) в приложении, какие значения она может принимать и какие действия над ней можно производить. Существует несколько способов по которым мы можем сгруппировать различные типы данных. В C# все типы данных подразделяются на две большие группы — ссылочные типы и типы значений. Соответственно, переменная типа значений хранит непосредственно данные, а переменная ссылочного типа, как следует из названия, ссылку на данные, которые именуются каким-либо объектом.

Схема типов данных в C#

Опираясь на официальную документацию по языку C#, все типы данных в C# можно представить следующей схемой:

Попробуем разобраться с каждой группой типов данных в C# по отдельности.

Типы значений

Простые (встроенные) типы данных.

Целочисленные типы

Язык C# предоставляет разработчику восемь различных целочисленных типов данных, представленных в таблице ниже:

Тип Разрядность в битах Значения
sbyte 8 От -128 до 127
byte 8 От 0 до 255
short 16 От -32 768 до 32 767
ushort 16 От 0 до 65 535
int 32 От -2 147 483 648 до 2 147 483 647
uint 32 От 0 до 4 294 967 295
long 64 От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
ulong 64 От 0 до 18 446 744 073 709 551 615

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

byte i = 300;

так как тип переменная типа byte может принимать значения только от 0 до 255.

Типы с плавающей запятой

Что касается типов данных с плавающей запятой (или точкой — кому как удобнее), то на данный момент в C# представлено всего три таких типа:

Тип Разрядность в битах Значения Точность, цифр
float 4 От ±1,5 x 10−45 до ±3,4 x 1038 6–9
double 8 от ±5,0 × 10−324 до ±1,7 × 10308 15–17
decimal 16 от ±1,0 x 10-28 до ±7,9228 x 1028 28-29
Про тонкости работы с числами в C# смотрите эту статью

Логический тип

Логический тип bool в C# используется для представления логических значений, которые могут иметь значение true (истина) или false (ложь). Например,

bool no = false;
bool yes = true;

Символ (Char)

Обработка знаков и строк в C# выполняется в кодировке Unicode. Тип char представляет элемент в кодировке UTF-16, а тип string представляет последовательность элементов в кодировке UTF-16. Например,

char ch = 'a';

Обратите внимание, что значение переменной типа char заключается в одинарные кавычки.

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

Тип перечисление определяется в C# следующим образом:

enum Season
{
Spring,
Summer,
Autumn,
Winter
}

По умолчанию порядковые номера перечисляемых значений начинаются с нуля и следуют последовательности, в которой их идентификаторы перечислены в объявлении типа. Мы можем переопределить порядковые номера некоторым или всем значениям в объявлении, например, так:

enum Colors
        {
            Red = 5,
            Green,
            Blue
        };

Теперь порядковые номера у элементов Colors будут следующие: Red = 5, Green = 6, Blue = 7. В перечислениях C# можно переопределять тип связанных значений констант элементов перечисления. Так, по умолчанию тип связанных значений констант имеет тип int, однако мы можем переопределить тип следующим образом:

enum ErrorCode : ushort 
{ None = 0, 
  Unknown = 1, 
  ConnectionLost = 100, 
  OutlierReading = 200 
}

Подробнее о перечислениях можно узнать в справке Microsoft или в этой части.

Структуры

Структуры в C# можно отнести к пользовательским типа данных. Такие типы данных используются для определения каких-либо сложных сущностей, позволяя объединять свойства этих сущностей в виде отдельно целостной структуры данных. Например, вот так мы можем описать координаты точки, используя структуры:

public struct Coords 
  { public Coords(double x, double y) 
    { X = x; 
      Y = y; 
    } 
    public double X; 
    public double Y; 
}

Теперь, чтобы воспользоваться структурой и вывести на экран координаты точки, мы можем написать вот такой код:

Coords Point;
Point.X = 100;
Point.Y = 200;
System.Console.WriteLine(Point.X+" "+Point.Y);

Подробнее о структурах можно узнать в справке Microsoft или в этий статье учебника по C#.

Кортежи

Тип кортежей появился в C# 7.0. Кортежи — это упрощенные структуры данных, содержащие несколько полей для представления элементов данных. Поля не проверяются, и собственные методы определять нельзя. Об этом типе данных поговорим позднее, когда начнем разбираться с конкретными примерами работы в C#. 

Подробнее о кортежах — см. справку Microsoft.

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

К ссылочным типам в C# относят: классы, интерфейсы, массивы и делегаты.

Классы

Тип class — пользовательский тип данных, который определяет структуру данных, которая содержит данные-члены (поля) и функции-члены (методы, свойства и т. д.).

С классами мы уже имели дело, когда писали свое первое приложение в Visual Studio. Пример определения класса в C#:

class Program
{
   static void Main(string[] args)
   {
      Console.WriteLine("Hello, world!");
   }
}

Классы поддерживают механизмы одиночного наследования и полиморфизма. К классам в C#, в соответствии с официальной документацией, отнесены также и строки (string). Почему — узнаем чуть позднее, когда будем рассматривать работу со строками в C#.

Подробнее о классах в справке Microsoft.

Интерфейсы

Тип interface (интерфейс) определяет контракт в виде именованного набора открытых функций-членов. Объект типа class или struct, реализующий interface, должен предоставить реализации для всех функций-членов интерфейса.

Тип interface может наследовать от нескольких базовых интерфейсов, а class или struct могут реализовывать несколько интерфейсов.

Подробнее об интерфейсах C# в справке Microsoft или в этой статье.

Массивы

Массив — это набор однотипных переменных. Определить массив можно следующим образом:

//объявляем массив из трех чисел
 int[] MyArray = new int[3];
//задаем значения элементов массива
 MyArray[0] = 10;
 MyArray[1] = 20;
 MyArray[2] = 30;</pre>

Про массивы и работу с ними мы также поговорим позднее. Подробнее о массивах C# — см. справку Microsoft.

Делегаты

Тип delegate (делегат) представляющий ссылки на методы с конкретным списком параметров и типом возвращаемого значения. Делегаты позволяют использовать методы как сущности, сохраняя их переменные и передавая в качестве параметров.

Делегаты аналогичны типам функций, которые используются в функциональных языках. Их принцип работы близок к указателям функций из некоторых языков.

В отличие от указателей функций, делегаты являются объектно-ориентированными и типобезопасными.

Подробнее о делегатах C# — см. справку Microsoft  или эту статью.

Итого

Сегодня мы рассмотрели структуру типов данных в C#. Узнали, что из себя представляют ссылочные типы данных и типы значений. Конечно, представленной выше информации недостаточно, чтобы детально погрузиться в особенности каждого типа, вопросы его использования в программах и так далее, но эта информация может служить нам своеобразным словарем к которому мы будем периодически обращаться при детальном изучении того или иного типа данных C#.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии