
- •Оглавление
- •Об авторе
- •Посвящение
- •Благодарности
- •Ждем ваших отзывов!
- •Что такое .NET
- •Создание исходной программы
- •Тестовая поездка
- •Каркас программы
- •Комментарии
- •Введение в хитрости панели элементов
- •Повторное использование кода из панели элементов
- •Правила объявления переменных
- •Вариации на тему int
- •Объявление переменной с плавающей точкой
- •Ограничения переменных с плавающей точкой
- •Объявление переменных типа decimal
- •Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
- •Логичен ли логический тип
- •Символьные типы
- •Что такое тип-значение
- •Неизменяемость строк
- •Основные операции над строками
- •Сравнение строк
- •Сравнение без учета регистра
- •Отличие строк в разных регистрах
- •Преобразование символов строки в символы верхнего или нижнего регистра
- •Поиск в строках
- •Как искать
- •Пуста ли строка
- •Удаление пробельных символов
- •Анализ числового ввода
- •Обработка последовательности чисел
- •Объединение массива строк в одну строку
- •Арифметика
- •Простейшие операторы
- •Порядок выполнения операторов
- •Оператор инкремента
- •Сравнение чисел с плавающей точкой
- •Составные логические операторы
- •Вычисление типа операции
- •Типы при присваивании
- •Перегрузка операторов
- •Ветвление с использованием if и switch
- •Инструкция if
- •Инструкция else
- •Как избежать else
- •Вложенные инструкции if
- •Конструкция switch
- •Циклы
- •Цикл без счетчика
- •Правила области видимости
- •Пример
- •Зачем нужны разные циклы
- •Зачем нужны массивы
- •Массив фиксированного размера
- •Массив переменного размера
- •Свойство Length
- •Инициализация массивов
- •Понятие <т>
- •Обобщенные коллекции
- •Инстанцирование пустого списка
- •Создание списка целых чисел
- •Преобразования списков в массивы и обратно
- •Подсчет количества элементов в списке
- •Поиск в списках
- •Инициализаторы массивов и коллекций
- •Выполнение специфичных для множеств задач
- •Создание множества
- •Добавление элемента в множество
- •Выполнение объединения
- •Пересечение множеств
- •Получение разности
- •Не используйте старые коллекции
- •Обход каталога файлов
- •Начало программы
- •Получение начальных входных данных
- •Создание списка файлов
- •Форматирование вывода
- •Вывод в шестнадцатеричном формате
- •Обход коллекций: итераторы
- •Доступ к коллекции: общая задача
- •Использование foreach
- •Формат индексатора
- •Блок итератора
- •Создание каркаса блока итератора
- •Итерирование дней в месяцах
- •Что же такое коллекция
- •Синтаксис итератора
- •Блоки итераторов произвольного вида и размера
- •Обобщенные классы безопасны
- •Обобщенные классы эффективны
- •Очередь с приоритетами
- •Распаковка пакета
- •Написание обобщенного кода
- •Использование простого необобщенного класса фабрики
- •Незавершенные дела
- •Ковариантность
- •Использование механизма исключений для сообщения об ошибках
- •Что происходит при генерации исключения
- •Исключительный пример
- •Что делает этот пример "исключительным"
- •Трассировка стека
- •Советы по написанию кода с хорошей обработкой ошибок
- •Анализ возможных исключений метода
- •Как выяснить, какие исключения генерируются теми или иными методами
- •Генерирующие исключения выражения
- •Работа с перечислениями
- •Создание перечислений с инициализаторами
- •Указание типа данных перечисления
- •Применение перечислений в конструкции switch
- •Процедурные поездки
- •Объектно-ориентированные поездки
- •Определение класса и объекта
- •Определение класса
- •Что такое объект
- •Различие между объектами
- •Работа со ссылками
- •Классы, содержащие классы
- •Определение константных членов-данных и членов-данных только для чтения
- •Передача аргументов методу
- •Передача методу нескольких аргументов
- •Соответствие определений аргументов их использованию
- •Перегрузка методов
- •Реализация аргументов по умолчанию
- •Возврат значения оператором return
- •Кортеж с двумя элементами
- •Создание кортежей более чем с двумя элементами
- •Глава 14 Поговорим об этом
- •Определение методов
- •Определение статического метода
- •Определение метода экземпляра
- •Полное имя метода
- •Ключевое слово this
- •Когда this используется явно
- •Что делать при отсутствии this
- •Использование локальных функций
- •Прочие уровни безопасности
- •Методы доступа
- •Пример управления доступом
- •Выводы
- •Статические свойства
- •Побочные действия свойств
- •Дайте компилятору написать свойства для вас
- •Методы и уровни доступа
- •Замена конструктора по умолчанию
- •Конструирование объектов
- •Непосредственная инициализация объекта
- •Конструирование с инициализаторами
- •Инициализация объекта без конструктора
- •Определение свойств с кодом
- •Определение конструкторов и деструкторов с кодом
- •Определение методов доступа к свойствам с кодом
- •Определение методов доступа к событиям с кодом
- •Наследование класса
- •Более сложный пример наследования
- •ЯВЛЯЕТСЯ или СОДЕРЖИТ
- •Доступ к BankAccount через содержание
- •Отношение СОДЕРЖИТ
- •Заменяемость классов
- •Неверное преобразование времени выполнения
- •Указание конкретного конструктора базового класса
- •Обновленный класс BankAccount
- •Перегрузка унаследованного метода
- •Простейший случай перегрузки метода
- •Различные классы, различные методы
- •Сокрытие метода базового класса
- •Вызов методов базового класса
- •Что неверно в стратегии использования объявленного типа
- •Использование is для полиморфного доступа к скрытому методу
- •Объявление метода виртуальным и перекрытие
- •Получение максимальной выгоды от полиморфизма
- •Разложение классов
- •Абстрактный класс: ничего, кроме идеи
- •Как использовать абстрактные классы
- •Создание абстрактных объектов невозможно
- •Опечатывание класса
- •Реализация интерфейса
- •Именование интерфейсов
- •Наследование и реализация интерфейса
- •Преимущества интерфейсов
- •Тип, возвращаемый методом
- •Что скрыто за интерфейсом
- •Гибкие зависимости через интерфейсы
- •Реализация отношения СОДЕРЖИТ с помощью интерфейсов
- •Определение делегата
- •Пример передачи кода
- •Делегирование задания
- •Очень простой первый пример
- •Более реальный пример
- •Создание приложения
- •Жизненный цикл делегата
- •Анонимные методы
- •Проектный шаблон Observer
- •Что такое событие. Публикация и подписка
- •Как издатель оповещает о своих событиях
- •Как подписаться на событие
- •Как опубликовать событие
- •Как наблюдатели "обрабатывают" событие
- •Сборки
- •Выполнимые файлы
- •Библиотеки классов
- •Создание проекта библиотеки классов
- •Создание автономной библиотеки классов
- •Создание классов для библиотеки
- •Использование тестового приложения
- •Дополнительные ключевые слова для управления доступом
- •protected: поделимся с подклассами
- •protected internal: более изощренная защита
- •Размещение классов в пространствах имен
- •Объявление пространств имен
- •Пространства имен и доступ
- •Использование полностью квалифицированных имен
- •Ссылочные типы
- •Выходные параметры
- •Альтернативные методы возврата значений
- •Работа с переменными out
- •Возврат значений по ссылке
- •Различия типов-значений
- •Когда следует использовать структуры
- •Добавление распространенных элементов структур
- •Управление отдельной записью
- •Добавление структур в массивы
- •Перекрытие методов
- •Определение того, что следует защищать
- •Документирование компонентов программы
- •Разложение компонентов на функции
- •Оценка рисков
- •Аутентификация с использованием входа в Windows
- •Безопасность развертывания
- •Уязвимости сценариев
- •Наилучшие методы защиты приложений Web Forms
- •Получение данных
- •Настройка образца схемы базы данных
- •Подключение к источнику данных
- •Работа с визуальными инструментами
- •Написание кода для работы с данными
- •Использование Entity Framework
- •Где водится рыба: файловые потоки
- •Потоки
- •Читатели и писатели
- •Пример использования потока
- •Как это работает
- •Наконец-то мы пишем!
- •Использование конструкции using
- •Загрузка файла из Интернета
- •Регистрация сетевой активности
- •Графика
- •Перья
- •Кисти
- •Текст
- •Классы рисования и каркас .NET
- •Приступая к работе
- •Настройка проекта
- •Обработка счета
- •Создание подключения к событию
- •Рисование доски
- •Запуск новой игры

t!! |
M!M |
M!!!-iMdaEoMB-i!!o!!M, !dM !.i!-i!!! |
MM!!-ifD!!a!.i, |
pО |
||||
ПБЗ |
БЗp |
p p |
Оl!w |
d!!!!.iada!da!a |
!! !!.i!.iD!.i!f!.i!! |
M!M |
||
|
!!!!-i! |
!! |
!P! o!!! !Dd |
!!!! |
!-d!-i!!i it P!d!!aMda! |
oa! !-s:!!a |
||
ЗАПОМНИ! !!o!!!!a |
DM-i!B DM-iD!!a!!!.i !.i!!.ia!,!MM С !!!!!!.ia E !-!a! !!!f! |
|||||||
|
БppБОpПwБПБp |
p ОО О |
t ПП Оt |
p |
О |
|||
|
tЗt t |
|
tБp |
|
|
|
|
|
Замена конструктора по умолчанию
|
"1S,:,"1,,1V1,,:S"1_ |
|
'.S"1,' |
'l |
|
#,,'l |
|
'l('l |
1V1',1V1-1V1__#S |
.,# |
,#_#,#((f# |
|
ci,-#,,,,: |
||||||||||
_"1. |
,"1"1S.#S,S._.,, |
v'l,'l |
-('#( |
1,:,1V1 |
|
,,,: |
,("11 1'l |
,,',,"1. |
|
а."1-,"1.("1 |
|
,'.# |
|
,,,: |
|||||||||
,з"1,-_'l(,S.'В |
-('#('l,: |
,"1 |
|
_,"1,'('l.,, |
|
|
(# |
,:. ,,:.,,S,,: |
,"1__# |
|
,S(f, |
,"1,S"1,:( |
|
'l#,w |
|||||||||
|
',,,"1S_'l, |
,,',, |
|
amRo |
|
|
rri"1 , |
o S"1_"1, |
_.# |
_,' |
_#- |
|
. |
ciS"1. |
1 1,'.#_ |
|
|
|
|||||
,B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. . г |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"1S,:(_ |
,#."1# |
( |
',-("1# |
|
-('#(1V1# |
,з','(,' |
.,"1,(# |
,"1__#,S("1 |
|
(_ |
,#."1# |
-('# |
||||||||||
('l# |
("1,#_' |
,#S' |
"1,_#,# |
,#(("1 |
(# |
,:.,,:#S,,: |
.#_(f,_ |
|
|
|
|
|
|
|
|
|
|||||||
|
"1ciS"1,_ . |
,'((f. |
,"1 ,#(S |
,, |
',, |
|
|
oa m R r ri |
|
o ., |
,.,,'#S |
|
,#S"1, |
||||||||||
|
oи amRo rri |
o |
'l('l |
1', |
1V1-1V1__.,,v'l. |
|
|
"1,зО#,S_ p,(',"1 |
|
|
S',"1К |
|
,"1, |
1Y1"1, |
|
,#_#h |
|||||||
,,' |
,f.'#S |
,,'l_,"1, |
|
,з"1,-__.,, |
|
|
"1S.#S,S.#(("1,S- |
(' |
,_'l, |
|
,',(_.,, |
|
,_"11 1_ |
',,_ |
|||||||||
,,"1,--_.,,v_.,, |
|
,'((f. |
,,',,_ |
|
|
|
,,1V1 .,__1 1 |
|
,_'l |
,"1.#('l# |
-',з_,#S |
.f-.'S- |
|
,#S"1, |
|||||||||
|
oи o amRrri |
o |
S"1 |
,_"1 |
|
1V1# ,#S"1,f |
,з'(,"1.,,"11 1"1 |
,#S' |
|
,"11 1_S |
"1,'- |
|
-,,: |
|
(#_' |
||||||||
,з"1S"1,,"1,"1 |
,з(о,, 1 |
1Y1"1S,: |
,_'l |
|
ciS"1, |
1V1 (# |
,з_,_S |
|
,"1,#_.'S- |
(1V1, |
',1V11Y1 |
"1_ 1V1,з"1, |
|
|
|||||||||
|
|
t!!!.i!.i |
!! |
!!!D!! |
|
!!!!P!aB!.i, |
!! |
D!!d!M! |
!!a!!f |
|
!!!!!!-M! |
!!a!!! |
|||||||||||
|
|
lАл l |
e оmmi l !!a!df! |
!!!D!f |
!-!!.i!!o! |
D!aB!!dd !!a!!! |
!.i! |
||||||||||||||||
|
|
!.ia!,!M! !P! !-s:! !a!D dКИ!, d!d!!M, |
!!!!!B |
!d!-!!!f |
|
!!!!.i!.i |
!d!!! |
||||||||||||||||
ЗАПОМНИ! |
!.ia!D!,!a |
!.i!! |
!!!B!fB |
!!a!! |
!Da!!!a Mo!!.i!MDf-ifD!!!fB |
it |
!d! |
||||||||||||||||
|
|
!.i!-i! !!MM !-s:!!a! |
|
|
|
ОПБЗ |
|
БpЗ |
ППt!!!i.iada |
!d !!P -f |
M!!i |
||||||||||||
|
|
!!D!aB!.i, |
!!! |
|
lАл |
И |
et |
!!M |
tWeW!! |
it |
ad!-a!a oa!-f |
||||||||||||
|
|
!!!!.iada!a!d |
!!!.i!! |
|
a! |
D! |
!!, |
oa! ! |
M!, !.i!!!P! |
|
!!!!.i!.i! |
a!! |
oa! !!!i |
||||||||||
|
|
!.iada!a!d!! !!.i!.i! |
|
|
el |
оmim |
l !!!!a |
!.i!!!aEo!B |
|
DM! |
|
|
|
|
|
tН
tО
tt n |
ПDi er Sal!W !!Н! !!!! !!!,!!!!! |
E! !d!! ,, !!!,!!!! |
!! aR |

Содержимое конструктора BankAccount то же, что и первоначального ме тода InitBankAccount ( ) . Однако конструктор имеет некоторые особенности :
))
))
))
))
всегда имеет то же имя, что и сам класс; может как принимать параметры, так и вызываться без них; не имеет возвращаемого типа, даже типа void;
метод Main ( ) не должен вызывать никаких дополнительных мето дов для инициализации объекта при его создании - не нужны ни
какие вызовы Init ( ) .
Если вы создаете собственный конструктор, С# не создает конструк тор по умолчанию автоматически. Ваш конструктор заменяет кон структор по умолчанию и становится единственным способом соз
ЗАПОМНИ! дания экземпляра класса.
Конструирование объектов
|
нмнa м. П. |
a9П s4 С. s |
ИaйСИ.aущ н |
нДля этого трээуахтлу eтаkтруы |
||
ут |
DemonstrateCustomConstructor. |
|
||||
|
y» , |
l |
б |
b |
еc |
|
uu cl |
KlG |
G |
|
|||
uu |
|
|
|
|
б |
|
uu |
l |
clKbl |
K lG |
U |
. |
|
K |
b |
|
||||
|
uu ' )] lb |
c |
|
ы |
у |
|
|
uu |
»b K |
' )]я lb |
|
|
|
|
|
|
|
|
тл
ГЛАВА 1 5 Класс: каждый сам за себя 341

342 ЧАСТЬ 2 Объектно-ориентированное программирование на С#

1 . Программа начинает работу, и метод Main е о выводит начальное со общение и сообщение о предстоящем создании локального объекта МyObject.
еенМетод мain () создает объект localObjectтипа МуОЬj ect.
3 . МуОЬject содержит статический член _staticObj класса МyOtherObject.
Все статические члены-данные инициализируются до первого выполне ния конструктора Ча лРрго71еаОВ1 этом случае С# присваивает переменной _s taticObj ссылку на вновь созданный объект перед тем, как передать управление конструктору MyObject.
4. Конструктор МуОЬj ect получает управление. Он выводит начальное сообщение и напоминает, что статический член уже сконструирован до того, как начал работу конструктор МуОЬjесt ( ) .
ионПосле объявления о своих намерениях по динамическому созданию нестатического члена конструктор MyObj ect создает объект класса MyOtherObject с использованием оператора new, что сопровождается выводом второго сообщения о создании МyOtherObject на экран.
6. Управление возвращается конструкторуМуОЬjесt, который, в свою оче редь, возвращает управление методумain е о в
Непосредственная инициализация объекта
|
.П9П. |
9 9 |
94а9 |
4 |
99 а1 |
ж. 4 |
у ж С. М |
a С |
.a1 |
м. |
ж.а 1 |
||
9 |
9 94а9 |
|
9a.ж4Ич а1 |
у |
4 у1 |
1м.Мa1 |
МИж1 . М9Мм.а ч |
ж. 4 |
91П 9 |
9 9 |
|||
4а9 |
И4.a. ж |
3О. |
|
441 |
|
Са. 4ММBankAccount би-eии |
1нс тьнплиьасMпертби |
||||||
ишкнe иб ои |
K |
?K |
|
/bb |
|
|
|
|
|
|
|
|
|
о |
®b b |
|
|
|
|
|
|
|
|
|
|||
uu |
|
|
|
|
|
|
|
•ййй |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
uu |
· |
D |
l |
/cb |
з( |
•lйййв |
|
|
|
|
|
|
|
тKb |
|
|
|
|
|
|||||||
uu |
|
|
( |
=l ++ nextAccountNumЬer; |
|
|
|
|
|
||||
® |
Kcb |
|
|
|
|
|
|
|
|||||
|
|
|
|
= |
oа A |
|
|
|
|
|
|
|
|
- ou, |
|
|
|
u u o |
|
|
|
|
|
|
|
Г |
АВА 1 5 |
класс: каждый сам за себя |
343 |
Л |
|
|