Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

5.2. Простые (базовые) типы c# как классы

Система типов C# построена на основе классов. Уже несколько раз сказано,

что любой класс в C# является производным от базового класса object. Таким

образом, в языке C# вообще нет типов, отличных от классов и структур. (Чем

структура отличается от класса, нам ещё предстоит разобрать и понять.) Простые

(фундаментальные, базовые) типы, такие как int и char, на самом деле являются не

самостоятельными типами, а представляют собой обозначения (условные названия)

системных типов

"тип:системный тип" , представляемых платформой .NET

Framework в виде соответствующих структур.

Итак, надеясь на терпение читателя (ведь мы, например, не вводили понятия

структуры), повторим, что все предопределенные типы языка C# представляют в

программах соответствующие им структуры из пространства имен System

библиотеки

.NET

Framework.

Соответствие

между

предопределенными

(встроенными) типами языка C# и упомянутыми структурами иллюстрирует

Таблица 5.1.

Таблица 5.1.

Тип языка C#

Тип CTS

Соответствие CL

S

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/

551cfe35-2632-4343-

af49-33ad12da08e2.htm"

bool

System.Boolean

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/111f1db9-

ca32-4f0e-

b497-4783517eda47.htm"

byte

System.Byte

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/

1a9c7b48-73d1-4d33-

b485-c4faf0a816bc.htm"

sbyte

System.SByte

-

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/

b51cf4fb-124c-4067-af48-

afbac122b228.htm" char

System.Char

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/b6522132-

b5ee-4be3-

ad13-3adfdb7de7a1.htm"

decimal

System.Decimal

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/

0980e11b-6004-4102-

abcf-cfc280fc6991.htm"

double

System.Double

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/1e77db7b-

dedb-48b7-8dd1-

b055e96a9258.htm" float

System.Single

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/

212447b4-5d2a-41aa-88a

b-84fe710bdb52.htm" int

System.Int32

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/e93e42c6-

ec72-4b0b-89df-2fd8d36f

7a7b.htm" uint

System.UInt32

-

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/

f9b24319-1f39-48be-

a42b-d528ee28a7fd.htm"

long

System.Int64

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/

f2ece624-837a-40cf-92c5-

343e7f33397c.htm" ulong

System.UInt64

-

Казалось бы, что эквивалентность традиционных названий типов (например,

int, char, string… ) обозначениям типов в CTS (System.Int32, System.Char,

System.String…) делает ненужным знакомство с соответствующими структурами из

пространства System. Однако, это не так. Имена системных типов используются в

названиях средств библиотеки классов .NET Framework. Кроме того, при

идентификации типа объекта с помощью метода GetType() для обозначения типа

используется его системное имя, а не имя, принятое в C#.

Отображенное в таблице 5.1 соответствие типов языка C# и системных

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/93f60c0b-

e17a-40a9-9362-

cca5fb77b0e7.htm"

object

System.Object

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/04c10688-

e51a-4a87-

bfec-83f7fb42ff11.htm"

short

System.Int16

есть

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/1a7dbaae-

b7a0-4111-872a-

c88a6d3981ac.htm"

ushort

System.UInt16

-

HYPERLINK "ms-

help://MS.VSCC.v80/

MS.MSDN.v80/

MS.VisualStudio.v80.en/

dv_csref/html/3037e558-

fb22-494d-bca1-

a15ade11b11a.htm"

string

System.String

есть

типов .NET Framework приходится учитывать в тех случаях, когда код на C# нужно

использовать в разноязычных приложениях. Например, для целочисленных

значений CTS предусматривает применение типов Byte, Int16, Int32, Int64. Тем

самым для разноязычных приложений недопустимы беззнаковые целочисленные

типы (uint, ulong, ushort) и тип sbyte.

Несмотря на то, что в С# введены сокращенные обозначения простых типов,

нет ограничения и на применение системных имен. Например, следующие два

объявления целочисленной переменной с именем cluster эквивалентны:

int cluster = 33;

System.Int32 cluster = 33;

Кроме того, переменную простого типа можно объявить, используя формат

объявления объекта класса "объявление:объявления объекта класса" :

имя_класса имя_объекта = new имя_класса();

В этом случае в качестве имени класса используют или традиционное, или

системное

обозначение

типа.

Имя_объекта

выбранный

программистом

идентификатор, new – специальная операция вызова конструктора того класса,

который соответствует типу переменной. С механизмом конструкторов нам ещё

придётся подробно знакомиться. Сейчас достаточно сказать, что назначение

конструктора "конструктор" – разместить в памяти и инициализировать новый

экземпляр объекта класса.

Пример двух эквивалентных объявлений с операцией new:

double radix = new double ();

System.Double radix = new System.Double ();

В каждом из этих случаев объявлена вещественная переменная с именем radix

типа double, которой с помощью конструктора присваивается предусмотренное по

умолчанию нулевое значение.

Происхождение типов от общего базового класса System.Object позволяет

применять к каждой переменной и константе следующие методы (перечислены не

все):

string ToString () – возвращает строку, содержащую символьное представлени

е

значения того объекта, к которому этот метод применён;

System.Type GetType () – возвращает системный тип того объекта, к которому

применен метод;

bool Equals (object obj) – проверяет эквивалентность объекта-параметра и объекта,

к которому этот метод применен.

Прежде чем привести примеры применения перечисленных методов, напомним

что методы могут принадлежать классу (в этом случае они должны быть

статическими "метод:статический" ), а могут относиться к конкретным объектам

класса (нестатические методы "метод:нестатический метод" ). В первом случае для

обращения к методу используется выражение

имя_класса.имя_метода (аргументы)

Примером служит обращение Console.WriteLine(), где Console – имя

библиотечного класса, представляющего консольный поток. Во втором случае для

обращения к методу обязательно должен быть определен объект, и вызов

осуществляет выражение

имя_ссылки_на_объект.имя_метода (аргументы)

Напомнив синтаксис обращения к методам, приведем следующую программу, в

которой к переменным базового типа применяются методы, унаследованные из

класса Object.

// 05_01.cs - простые типы как классы

using System;

class Program

{

static void Main()

{

long row = 18L;

System.Int64 col = 423L;

Console.WriteLine("row.GetType()= " + row.GetType());

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()=18423

row + col = 441

Как уже упомянуто, метод System.GetType() возвращает название типа

объекта, принятое в .NET Framework, а не в языке C#. Именно поэтому в

результатах для row

выведен тип System.Int64, а не long. При сравнении

переменных с помощью выражения row.Equals(col) сравниваются их значения и

возвращается логическое значение False. Значением выражения row.ToString()

+col.ToString()

является

конкатенация

строковых

представлений

значений

переменных row и cal. Для сравнения, в следующем обращении к методу WriteLine()

в скобки заключено выражение (row+col), и в этом случае в скобках выполняется не

конкатенация строк, а арифметическое суммирование значений переменных.

Соседние файлы в папке CSBasicCourse2ndedPodbelsky