Типы данных


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

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

  • типы значений;
  • ссылочные типы;
  • указатели.

Сейчас мы их рассмотрит подробнее.

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

Переменные данного типа ассоциируются со своим значением напрямую.  Переменные типов значений содержат данные как бы напрямую в себе. Примерами таких типов данных являются int, char, и float,  которые предназначены для хранения целых чисел, символов и вещественных чисел соответственно. Эти типы данных являются наследниками класса System.ValueType. И когда вы объявляете переменную типа int, система резервирует память под значение данного типа (строго определенно количество байтов).

byte byteValue = 128; //Целые числа от 0 до 255
sbyte sbyteValue = -120; //Целые числа от -128 до 127
short shortValue = -1024; //Целые числа от -32 768 до 32 767
ushort ushortValue = 1024; //Целые числа от 0 до 65535
int intValue = -241; //Целые числа от -2147483648 до 2147483647
uint intValue = 241; //Целые числа от 0 до 4294967295

/*Целые числа от -9223372036854&775808 до 9223372036854775807*/
long longValue = -45135;

/*Целые числа от 0 до 18446744073709551615*/
ulong longValue = 45135;

/*Числа с плавающей точкой от -3,402823e38 до -3,402823e38*/
float floatValue = -245.45;

/*Числа с плавающей точкой от -1,79769313486232e308 .. 1,79769313486232e308*/
double doubleValue = -245.45;

char charValue = 'c'; //Символ

/*
Тип позволяющий хранить 
значения формата «Да/Нет» или «Истина/Ложь».
*/

bool boolValue = true; //Переменная в значении «Да(Истина)»
bool otherBoolValue = false; //Переменная в значении «Нет(Ложь)»

Кстати, для того чтобы узнать сколько памяти занимает переменная определенного типа можно воспользоваться оператором sizeof. В результате, вы получите количество байт, необходимых для хранения переменной указанного типа. Пример использования sizeof смотрите ниже:

using System;

namespace DataTypes
{
    class Program
    {
        static void Main(string[] args)
        {
            //Вывод размера типа double 
            Console.WriteLine("Size of double: {0}", sizeof(double));

            //Для того, чтобы программа не закрылась раньше времени
            Console.ReadKey();
        }
    }
}

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

В переменных ссылочных типов не хранятся данные напрямую, в них хранятся ссылки на область памяти, где располагаются данные. В программе может быть несколько переменных ссылочного типа, ссылающихся на одну и туже область памяти, и при изменении целевого значения через одну переменную, значения остальных тоже изменятся, автоматически (так как все эти переменные ссылаются на одну область памяти). Ссылочные типы данных являются прямыми или косвенными наследниками класса System.Object. В основном, ссылочные типы данных являются «пользовательскими», т.е. созданными программистами (а не встроенными, системными типами), тем не менее, есть тип string, который стоит особняком. Этот тип предназначен для хранения переменных строкового типа и идет, что называется из «коробки». Это одна из положительных особенностей, отличающих C#, от того же C/C+. Вот пример объявления переменной типа string:

string someStr = "Какая-то строка";

Еще одной особенностью переменных ссылочных типов является то, что они могут не иметь значения как такового, т.е. не ссылаться ни на какой участок памяти. Если хотите, ссылаться на пустое место. Позже вы поймете зачем и когда это может пригодиться… А вот, пример, объявления «пустой» переменной ссылочного типа.

string someStr = null; //Мы используем ключевое слово null

Указатели

Указатели в C# похожи на указатели в C++. Переменные-указатели хранят не значения, а адрес памяти. Работа с указателями относится к небезопасному коду и на данном этапе я не буду подробно о них рассказывать.