Иерархия классов типов данных.

40. bool Логический тип. Может иметь только два значения -- true или false.
sbyte Целое со знаком, размером в 1 байт.
byte Целое без знака, размером в 1 байт.
short Кортокое целое со знаком.
ushort Короткое целое без знака.
int Целое со знаком. Для записи целых чисел в тексте программы можно использовать десятичную (по-умолчанию) или шестнадцатеричную (префикс 0x) нотацию. Например: 26, 0x1A
uint Целое без знака. Например: 26U, 0x1AU (суффикс U обязателен)
long Длинное целое со знаком. Например: 26L, 0x1AL (суффикс L обязателен)
ulong Длинное целое без знака. Например: 26UL, 0x1AUL (суффикс UL обязателен)
char Символ юникода (unicode character). Например: 'A' (символ в одиночных кавычках)
float Число с плавающей точкой одинарной точности (IEEE 754). Например: 1.2F, 1E10F (суффикс F обязателен)
double Число с плавающей точкой двойной точности (IEEE 754). Например 1.2, 1E10, 1D (суффикс D НЕ обязателен)
decimal Числовой тип данных, который обычно используется в финансовых расчетах и расчетах с участием денежных единиц, обеспечивает точность - до 28-го знака. Например: 123.45M (суффикс M обязателен)
object 8+ Элементарный базовый тип как для переменных-значений, так и для переменных-ссылок. Не может быть представлен в виде литерала.
string 20+ Непрерывная последовательность символов в юникоде (unicode characters). Например: "hello world!\n" (строка должна заключаться в двойные кавычки)

C# имеет унифицированную систему типов, таким образом, значение любого типа может интерпретироваться как объект. Любой тип в C#, прямо или косвенно, является наследником класса object. Ссылочные типы рассматриваются как простые объекты типа object. Типы-значения - как результат выполнения операции приведения типов.

Простейшие типы данных в .NET

Если принять за основу строение элемента, все типы можно разделить на простые (не имеют внутренней структуры) и структурированные (состоят из элементов других типов).

  Ключевое слово Тип .NET Диапазон значений Описание Размер, битов
Логический тип bool Boolean true, false    
Целые типы sbyte SByte От -128 до 127 Со знаком
  byte Byte От 0 до 255 Без знака
  short Intl6 От -32 768 до 32 767 Со знаком
  ushort UIntl6 От 0 до 65 535 Без знака
  int Int32 От -2 * 109 до 2* 109 Со знаком
  uint UInt32 От 0 до 4 • 109 Без знака
  long Int64 От -9 * 1018 до 9 • 1018 Со знаком
  ulong UInt64 От 0 до 18 • 1018 Без знака
Символьный тип char Char От U+0000 дои+ffff Unicode- символ
Вещественные float Single От 1.5 • 10-45 до 3.4 • 1038 7 цифр
  double Double От 5.0 • 10-324 ДО 1.7 10308 15-16 цифр
Финансовый тип decimal Decimal От 1.0 • 10-28 до 7.9 • 1028 28-29 цифр
Строковый тип string String Длина ограничена объемом доступной памяти Строка из Unicode- символов  
Тип object object Object Можно хранить все что угодно Всеобщий предок  

Любой встроенный тип С# соответствует стандартному классу библиотеки .NET, определенному в пространстве имен System. Везде, где используется имя встроенного типа, его можно заменить именем класса библиотеки. Это значит, что у встроенных типов данных С# есть методы и поля. С их помощью можно, например, получить минимальные и максимальные значения для целых, символьных, финансовых и вещественных чисел:

• double.MaxValue (или System.Double.MaxValue) — максимальное число типа double;

• uint.MinValue (или System.UInt32.MinVa 1 ue) — минимальное число типа uint.

Вещественные типы, или типы данных с плавающей точкой, хранятся в памятикомпьютера иначе, чем целочисленные. Внутреннее представление вещественногочисла состоит из двух частей — мантиссы и порядка, каждая часть имеет знак. Длинамантиссы определяет точность числа, а длина порядка — его диапазон.

Внутреннее представление величины целого типа — целое число в двоичном

коде. В знаковых типах старший бит числа интерпретируется как знаковый (0 —положительное число, 1 — отрицательное). Отрицательные числа чаще всего представляются в так называемом дополнительном коде. Для преобразования числа* в дополнительный код все разряды числа, за исключением знакового, инвертируются, затем к числу прибавляется единица, и знаковому биту тоже присваивается единица. Беззнаковые типы позволяют представлять только положительные числа, поскольку старший разряд рассматривается как часть кода числа.

Модификаторы ref, out и params при передачи параметров в метод.

Параметры-ссылки

Во многих методах все величины, которые метод должен получить в качестве исходныхданных, описываются в списке параметров, а величина, которую вычисляетметод как результат своей работы, возвращается в вызывающий код с помощьюоператора return. Очевидно, что если метод должен возвращать более однойвеличины, такой способ не годится. Еще одна проблема возникает, если в методетребуется изменить значение каких-либо передаваемых в него величин. В этихслучаях используются параметры-ссылки.Признаком параметра-ссылки является ключевое слово ref перед описанием параметра:

Ref тип имя

Пример заголовка метода, имеющего один параметр-ссылку целого типа:

Void P( ref int x ).

При вызове метода в область параметров копируется не значение аргумента, а его адрес, и метод через него имеет доступ к ячейке, в которой хранится аргумент.Таким образом, параметры-ссылки передаются по адресу (чаще употребляетсятермин «передача по ссылке»). Метод работает непосредственно с переменнойиз вызывающей функции и, следовательно, может ее изменить, поэтому еслив методе требуется изменить значения параметров, они должны передаватьсятолько по ссылке.

!!!!При вызове метода на месте параметра-ссылки может находиться только ссылка на инициализированную переменную точно того же типа. Перед именем параметрауказывается* ключевое слово ref.

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

Пример самостоятельно

Несколько иная картина получится, если передавать в метод не величины значимых типов, а экземпляры классов, то есть величине ссылочных типов. Как выпомните, переменная-объект на самом деле хранит ссылку на данные, расположенныев динамической памяти, и именно этассылка передается в метод либо по адресу, либо по значению. В обоих случаях метод получает в свое распоряжениефактический адрес данных и, следовательно, может их изменить.

Разница между передачей объектов по значению и по ссылке состоит в том, что в последнем случае можно изменить саму ссылку, то есть после вызова методаона может указывать на другой объект.

Выходные параметры

Довольно часто возникает необходимость в методах, которые формируют несколько величин, например, если в методе создаются объекты или инициализируютсяресурсы. В этом случае становится неудобным ограничение параметров-ссылок: необходимость присваивания значения аргументу до вызова метода. Этоограничение снимает спецификатор out. Параметру, имеющему этот спецификатор, должно быть обязательно присвоено значение внутри метода, компиляторза этим следит. Зато в вызывающем коде можно ограничиться описанием переменнойбез инициализации.

При вызове метода перед соответствующим параметром тоже указывается ключевое слово out.

Пример самостоятельно

Наши рекомендации