Простые (базовые) типы C# как типы CTS
Как уже упомянуто, метод System. GetTypeO возвращает название типа объекта, принятое в .NET Framework, а не в языке С#. Именно поэтому в результатах для row выведен тип System.Int64, а не long. При сравнении переменных с помощью выражения row. Equals (col) сравниваются их значения и в примере возвращается логическое значение False. Значением выражения row. ToStringO + col. ToStringO является… Читать ещё >
Простые (базовые) типы C# как типы CTS (реферат, курсовая, диплом, контрольная)
Система типов C# построена на основе классов, точнее, типов, имеющих общий базовый класс object. Простые (фундаментальные, базовые) типы, такие как int и char, на самом деле являются не самостоятельными типами, а представляют собой обозначения (условные названия) системных типов, представляемых платформой .NET Framework в виде соответствующих структур (см. табл. 5.1).
Таблица 5.1
Тип языка C# и тип CTS | Диапазон значений | Соответствие CLS |
bool System. Boolean. | true или false | есть. |
byte System.Byte. | от 0 до 255. | есть. |
sbyte System. SByte. | от -128 до 127. | нет. |
char System. Char. | от U+0000 до U+ffff. | есть. |
decimal System.Decimal. | (от -7.9 • 1028 до 7.9 • 1028)/(10 от о до 28). | есть. |
double System.Double. | от ±5.0 • 10-324до ±1.7 • 10308 | есть. |
float System.Single. | от-3.4 • 1038 до +3.4 • 1038 | есть. |
int System.Int32. | от -2 147 483 648 до 2 147 483 647. | есть. |
uint System.UInt32. | от 0 до 4 294 967 295. | нет. |
long System.Int64. | от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. | есть. |
ulong System.UInt64. | от 0 до 18 446 744 073 709 551 615. | нет. |
Тип языка C# и тип CTS. | Диапазон значений. | Соответствие CLS. |
object. System. Object. | любой тип данных. | есть. |
short. System.Intl6. | от -32 768 до 32 767. | есть. |
ushort. System.UIntl6. | от 0 до 65 535. | нет. |
string. System. String. | ограничен системными возможностями. | есть. |
Итак, все предопределенные типы языка C# представляют в программах соответствующие им структуры из пространства имен System библиотеки .NET Framework. Казалось бы, что эквивалентность традиционных названий типов (например, int, char, string…) обозначениям типов в CTS (System.Int32, System. Char, System. String…) делает ненужным знакомство с соответствующими структурами из пространства System. Однако это не так. Имена системных типов используются в названиях средств библиотеки классов .NET Framework. Кроме того, при идентификации типа объекта, например, с помощью метода GetType (), для обозначения типа используется его системное имя, а не имя, принятое в С#.
Отображенное в табл. 5.1 соответствие типов языка C# и системных типов .NET Framework приходится учитывать в тех случаях, когда код на C# нужно использовать в разноязычных приложениях. Например, для целочисленных значений CTS предусматривает применение типов Byte, Intl6, Int32, Int64. Тем самым для разноязычных приложений недопустимы беззнаковые целочисленные типы (uint, ulong, ushort) и тип sbyte.
Несмотря на то, что в C# введены сокращенные обозначения простых типов, нет ограничения и на применение системных имен. Например, следующие два объявления целочисленной переменной с именем cluster эквивалентны:
int cluster = 33;
System.Int32 cluster = 33;
Кроме того, переменную простого типа можно объявить, используя и формат объявления объекта :
имя_типа имя_объекта = new имя_типа();
В этом случае в качестве имени типа используют или традиционное для С#, или системное обозначение типа. Имя_объекта — выбранный программистом идентификатор, new — специальная операция вызова конструктора того типа, который соответствует типу переменной. С механизмом конструкторов нам еще придется подробно знакомиться. Сейчас достаточно сказать, что назначение конструктора — разместить в памяти и инициализировать новый экземпляр объекта.
Пример двух эквивалентных объявлений с операцией new:
double radix = new doubleQ;
System.Double radix = new System. Double ();
В каждом из этих случаев объявлена вещественная переменная с именем radix типа double, которой с помощью конструктора выделяется участок памяти и присваивается предусмотренное по умолчанию нулевое значение.
Происхождение типов от общего базового класса System. Object позволяет применять к каждой переменной и константе следующие методы (перечислены не все):
- • string ToString () — возвращает строку, содержащую символьное представление того объекта, к которому этот метод применен;
- • System. Type GetType () — возвращает системный тип того объекта, к которому применен метод;
- • bool Equals (object obj) — проверяет эквивалентность объектапараметра и объекта, к которому этот метод применен.
Прежде чем привести примеры применения перечисленных методов, напомним, что методы могут принадлежать классу или структуре (в этом случае они должны быть статическими), а могут относиться к конкретным объектам (экземплярам) класса или структуры (нестатические). В первом случае для обращения к методу (статическому) используется выражение.
имя_типа.имя_метода (аргументы).
Примером служит обращение Console. WriteLineO, где Console — имя библиотечного класса, представляющего консольный поток. Во втором случае для обращения к методу обязательно должен быть определен объект (экземпляр типа), и вызов осуществляет выражение.
имя_ссылки_на_объект.имя_метода (аргументы)
Напомнив синтаксис обращения к методам, приведем следующую программу, в которой к переменным базового типа значений применяются методы, унаследованные из класса object.
// 05_ei.cs — простые типы как наследники Object
using System;
class Program.
{
static void MainQ.
{
long row = 18L;
System.Int64 col = 423L;
Console.WriteLine («row.GetType ()= «+ row. GetTypeQ);
Console.WriteLine («row.Equals (col)= «+ row. Equals (col));
Console.WriteLine («row.ToString () + col. ToString ()=» + row. ToString () + col. ToString ());
Console.WriteLine («row + col = «+ (row + col));
} }
В программе переменные row и col определены с помощью разных обозначений одного и того же типа long. Значения указанные переменные получают за счет инициализации. Результаты выполнения программы:
row.GetType ()= System.Int64 row. Equals (col)= False row. ToString () + col. ToString ()=18 423 row + col = 441.
Как уже упомянуто, метод System. GetTypeO возвращает название типа объекта, принятое в .NET Framework, а не в языке С#. Именно поэтому в результатах для row выведен тип System.Int64, а не long. При сравнении переменных с помощью выражения row. Equals (col) сравниваются их значения и в примере возвращается логическое значение False. Значением выражения row. ToStringO + col. ToStringO является конкатенация строковых представлений значений переменных row и cal. Для сравнения, в следующем обращении к методу WriteLineO в скобки заключено выражение (row + col), и в этом случае в скобках выполняется не конкатенация строк, а арифметическое суммирование значений переменных.