Иерархия классов типов данных.
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.
Пример самостоятельно