
- •Предисловие
- •Объектная ориентация программ на C#
- •1.1. Типы, классы, объекты
- •1.2. Программа на C#
- •1.3. Пространство имен
- •1.4. Создание консольного приложения
- •Типы в языке C#
- •2.1. Типы ссылок и типы значений
- •2.2. Классификация типов C#
- •2.3. Простые типы. Константы-литералы
- •2.4. Объявления переменных и констант базовых типов
- •Операции и целочисленные выражения
- •3.1. Операции языка C#
- •3.2. Операции присваивания и оператор присваивания
- •3.3. Операции инкремента (++) и декремента (--)
- •3.4. Выражения с арифметическими операциями
- •3.5. Поразрядные операции
- •Выражения с операндами базовых типов
- •4.1. Автоматическое и явное приведение арифметических типов
- •4.2. Особые ситуации в арифметических выражениях
- •4.3. Логический тип и логические выражения
- •4.4. Выражения с символьными операндами
- •5.2. Простые (базовые) типы C# как классы
- •Операторы
- •6.1. Общие сведения об операторах
- •6.2. Метки и оператор безусловного перехода
- •6.4. Операторы цикла
- •6.5. Операторы передачи управления
- •6.6. Переключатель
- •Массивы
- •7.1. Одномерные массивы
- •7.2. Массивы как наследники класса Array
- •7.3. Виды массивов и массивы многомерные
- •7.5. Массивы массивов и поверхностное копирование
- •Строки – объекты класса string
- •8.1. Строковые литералы
- •8.2. Строковые объекты и ссылки типа string
- •8.3. Операции над строками
- •8.5. Форматирование строк
- •8.6. Строка как контейнер
- •8.7. Применение строк в переключателях
- •8.8. Массивы строк
- •8.8. Сравнение строк
- •8.10. Аргументы метода Main()
- •Методы C#
- •9.2. Соотношение фиксированных параметров и аргументов
- •9.3. Параметры с типами ссылок
- •9.4. Методы с переменным числом аргументов
- •9.5. Перегрузка методов
- •9.6. Рекурсивные методы
- •9.7. Применение метода Array.Sort()
- •Класс как совокупность статических членов
- •10.1. Статические члены класса
- •10.2. Поля классов (статические поля)
- •10.3. Статические константы
- •10.4. Статические методы
- •10.5. Статический конструктор
- •10.6. Статические классы
- •Классы как типы
- •11.1. Объявление класса
- •11.2. Поля объектов
- •11.3. Объявления методов объектов
- •11.4. Пример класса и его объектов
- •11.5. Ссылка this
- •11.6. Конструкторы объектов класса
- •11.7. Деструкторы и финализаторы
- •Средства взаимодействия с объектами
- •12.1. Принцип инкапсуляции и методы объектов
- •12.2. Свойства классов
- •12.3. Автореализуемые свойства
- •12.4. Индексаторы
- •12.5. Индексаторы, имитирующие наличие контейнера
- •Включение, вложение и наследование классов
- •13.1. Включение объектов классов
- •13.2. Вложение классов
- •13.3. Наследование классов
- •13.4. Доступность членов класса при наследовании
- •13.5. Методы при наследовании
- •13.6. Абстрактные методы и абстрактные классы
- •13.7. Опечатанные классы и методы
- •13.8. Применение абстрактых классов
- •Интерфейсы
- •14.1. Два вида наследования в ООП
- •14.2. Объявления интерфейсов
- •14.3. Реализация интерфейсов
- •14.4. Интерфейс как тип
- •14.5. Интерфейсы и наследование
- •Перечисления и структуры
- •15.1. Перечисления
- •15.2. Базовый класс перечислений
- •15.3. Структуры
- •15.4. Упаковка и распаковка
- •15.5. Реализация структурами интерфейсов
- •Исключения
- •16.1. О механизме исключений
- •16.3. Свойства исключений
- •16.5. Исключения в арифметических выражениях
- •16.6. Генерация исключений
- •16.7. Пользовательские классы исключений
- •Делегаты и события
- •17.1. Синтаксис делегатов
- •17.2. Массивы делегатов
- •17.3. Многоадресные групповые экземпляры делегатов
- •17.4. Делегаты и обратные вызовы
- •17.5. Анонимные методы
- •17.6. События
- •Литература
- •Предметный указатель
26 |
Г л а в а 2 |
|
|
последовательностью можно представить любой символ
Юникода. Формат такого представления: '\uhhhh',
где h – шестнадцатеричная цифра, u – обязательный префикс. Предельные значения от '\u0000' до '\uFFFF'.
Пример: '\u0066' соответствует символу 'f'
Разрешены также эскейп-последовательности вида '\xhh', где h- шестнадцатеричная цифра, x – префикс. Например, '\x2B' представляет код символа 't'.
2.4. Объявления переменных и констант базовых типов
По традиции, унаследованной от языков Си и С++, новый экземпляр (переменная) простого типа вводится с помощью объявления:
type name = expression;
где type – название типа;
name – имя экземпляра (переменной);
expression – инициализирующее выражение (например, константа).
Объявление обязательно завершается точкой с запятой. Названия базовых типов с примерами объявлений приведены
втабл. 2.1. (см. [2]).
Водном объявлении могут быть определены несколько переменных одного типа:
type name1 = expression1, name2 = expression 2;
Переменные одного объявления отделяются друг от друга запятыми.
Пример:
double pi=3.141593, e=2.718282, c=535.491656;
|
Типы в языке C# |
27 |
|
|
|
|
|
|
|
Таблица 2 . 1 |
|
|
Простые (базовые) типы значений |
||
|
|
|
|
Тип |
Описание |
Примеры объявлений |
|
|
|
|
|
sbyte |
8-битовый знаковый целый |
sbyte val = 12; |
|
(1 байт) |
|||
|
|
||
|
|
|
|
short |
16-битовый знаковый целый |
short val = 12; |
|
(2 байта) |
|||
|
|
||
|
|
|
|
int |
32-битовый знаковый целый |
int val = 12; |
|
(4 байта) |
|||
|
|
||
|
|
|
|
long |
64-битовый знаковый целый |
long val1 = 12; |
|
(8 байт) |
long val2 = 34L; |
||
|
|||
|
|
|
|
byte |
8-битовый беззнаковый целый |
byte val1 = 12; |
|
(1 байт) |
|||
|
|
||
|
|
|
|
ushort |
16-битовый беззнаковый целый |
ushort val1 = 12; |
|
(2 байта) |
|||
|
|
||
|
|
|
|
uint |
32битовый беззнаковый целый (4 |
uint val1 = 12; |
|
байта) |
uint val2 = 34U; |
||
|
|||
|
|
|
|
|
|
ulong val1 = 12; |
|
ulong |
64битовый беззнаковый целый (8 |
ulong val2 = 34U; |
|
байт) |
ulong val3 = 56L; |
||
|
|||
|
|
ulong val4 = 78UL; |
|
|
|
|
|
|
Вещественный с плавающей точкой |
|
|
float |
с одинарной точностью |
float val = 1.23F; |
|
|
(4 байта) |
|
|
|
|
|
|
double |
Вещественный с плавающей точкой |
double val1 = 1.23; |
|
с двойной точностью |
double val2 = 4.56D; |
||
|
(8 байт) |
||
|
|
||
|
|
|
|
bool |
Логический тип; значение или false, |
bool val1 = true; |
|
или true |
bool val2 = false; |
||
|
|||
|
|
|
|
char |
Символьный тип; значение – один |
char val = 'h'; |
|
символ Юникода (2 байта) |
|||
|
|
||
|
|
|
|
|
Точный денежный тип, по меньшей |
|
|
decimal |
мере 28 значимых десятичных |
decimal val = 1.23M; |
|
|
разрядов (12 байт) |
|
|
|
|
|
28 |
Г л а в а 2 |
|
|
Введя формат объявления переменных, следует остановиться на вопросе выбора их имен. Имя переменной – выбранный программистом идентификатор. Идентификатор — это последовательность букв, десятичных цифр и символов подчеркивания, которая начинается не с цифры. В языке C# в качестве букв допустимо применять буквы национальных алфавитов. Таким образом, правильными идентификаторами будут, например, такие последовательности:
Number_of_Line, объем_в_литрах, x14, mass.
В качестве имен, вводимых программистом, запрещено использовать служебные (ключевые) слова языка C#. Чтобы уже сейчас предостеречься от такой ошибки, обратите внимание на их список, приведенный в табл. 2.2.
|
|
|
|
Таблица 2 . 2 . |
|
|
Служебные слова языка C# |
|
|
|
|
|
|
|
abstract |
as |
base |
bool |
break |
byte |
case |
catch |
char |
checked |
class |
const |
continue |
decimal |
default |
delegate |
do |
double |
else |
enum |
event |
explicit |
extern |
false |
finally |
fixed |
float |
for |
foreach |
goto |
if |
implicit |
in |
int |
interface |
internal |
is |
lock |
long |
namespace |
new |
null |
object |
operator |
out |
override |
params |
private |
protected |
public |
readonly |
ref |
return |
sbyte |
sealed |
short |
sizeof |
stackalloc |
static |
string |
struct |
switch |
this |
throw |
true |
try |
typeof |
uint |
ulong |
unchecked |
unsafe |
ushort |
using |
virtual |
void |
volatile |
while |
|
|
|
|
|
|
|
|
Типы в языке C# |
29 |
|
|
Познакомившись со списком служебных слов, читатель сразу же обнаружит ошибку в следующем объявлении:
int try = 15; //Ошибка в имени переменной!
Инициализирующее выражение по типу вычисляемого значения должно соответствовать типу создаваемой переменной. Чаще всего это константа, однако, может быть любым выражением, операнды которого имеют конкретные значения в момент объявления переменной.
Примеры объявлений переменных:
double pi2=6.28; int два=2;
В объявлении переменной может отсутствовать инициализация. Однако, язык С# очень строг и не допускает существования в программе переменных с неопределёнными значениями. Поэтому после объявления переменной без её инициализации необходимо каким-то образом присвоить ей значение. Обычно для этого используют оператор присваивания:
имя_переменной = выражение;
Пример (удельный заряд электрона в единицах СГСЭ/г):
double electron_charge; // Объявление electron_charge=5.27e+17; // Присваивание значения
В отличие от литералов, которые сами по себе представляют собственные значения и не требуют предварительных объявлений, именованные константы вводятся с помощью конструкции:
const type name = expression;
Отличие от объявления переменной: наличие модификатора const и обязательность инициализации.
Контрольные вопросы
1.Чем отличаются типы знаковые от беззнаковых?
2.Приведите примеры констант-литералов всех числовых (арифметических) типов.