|
Главная » Архив материалов
Дополнительные сведения
о классах К настоящему моменту мы рассмотрели практически все основные приемы ООП, использующиеся в С#; однако существует несколько более сложных способов, с которыми также не мешает познакомиться. В этой главе будут обсуждаться сле- дующие темы: • Семейства — это объекты, в которых могут содержаться массивы других объектов и которые обладают функциональными возможностями для организации доступа к ним. • Перегрузка операторов — процедура конфигурирования классов с тем, чтобы иметь возможность применять такие операторы, как, например, + , для выполнения операций над экземплярами данного класса. • Усложненное преобразование — некоторые дополнительные возможности по преобразованию типов в С#. • Глубокое копирование — это процедура копирования, гарантирующая, что создаваемые объекты не содержат ссылок на данные, хранящиеся в исходном объекте. • Исключитель
...
Читать дальше »
|
Определение членов классов
В данной главе мы продолжим обсуждение способов определения классов в С#. Теперь мы переходим к рассмотрению того, что необходимо для определения членов классов, а именно полей, свойств и методов. Мы начнем с того, что познакомимся с кодом, требующимся для определения каждого из этих членов, а также рассмотрим создание необходимой структуры кода с помощью соответствующего мастера (wizard) VS. Мы также узнаем, каким об- разом можно быстро изменять члены, редактируя их свойства. После того как вы познакомитесь с основами определения членов, мы перей- дем к рассмотрению более сложных способов их использования: перевода членов базового класса в скрытое состояние, обращения к переопределенным членам базового класса и вложенных определений типов. В заключение мы применим эту теорию на практике и создадим библиотеку классов, которую можно будет постепенно достраивать и и
...
Читать дальше »
|
Определение классов
В предыдущей главе вы познакомились с возможностями объектно-ориентиро- ванного программирования (ООП). В этой главе мы перейдем от теории к практи- ке и рассмотрим определение классов в С#. Для начала мы не будем заходить столь далеко, чтобы определять члены клас- сов, а сконцентрируем свое внимание на определении самих классов. Может пока- заться, что мы чересчур ограничиваем тему, но не волнуйтесь: в этой главе содержится достаточное количество материала, который вам необходимо усвоить. В первую очередь мы рассмотрим основной синтаксис, применяемый при опи- сании классов, ключевые слова, которые могут использоваться для определения режима доступа к классу и для других целей, а также способы задания наследова- ния. Мы также разберем определение интерфейсов, поскольку оно во многих ас- пектах сходно с описанием классов. Остальная часть главы будет посвящена изучению раз
...
Читать дальше »
|
Введение
в объектно-ориентированное программирование В предыдущих главах мы рассмотрели синтаксис языка С# и основы програм- мирования на нем. Кроме того, мы научились собирать работоспособные консоль- ные приложения. Однако для того, чтобы получить доступ ко всему потенциалу С# и .NET Framework, необходимо научиться использовать методы объектно-ориен- тированного программирования (ООП). На самом деле некоторые из этих методов уже применялись нами, однако чтобы не усложнять жизнь, мы не акцентировали на этом внимание. В этой главе мы на некоторое время отвлечемся от кода и сосредоточимся на принципах, лежащих в основе ООП. Такой подход очень скоро приведет нас об- ратно к языку С#, поскольку последний неразрывно связан с ООП. Ко всем по- нятиям, введенным в настоящей главе, мы будем возвращаться в дальнейшем, иллюстрируя их с помощью примеров программ, так что не следует впадать в па-
...
Читать дальше »
|
Обработка ошибок
Первая часть данной главы была посвящена способам поиска и исправления ошибок в процессе разработки приложения, направленным на то, чтобы исклю- чить их появление в окончательном варианте программы. Существуют, однако, си- туации, когда заранее известно, что ошибки могут возникать, и способа добиться 100%-ной уверенности в их отсутствии не существует. В таких случаях рекоменду- ется заранее предусмотреть возникновение проблем и написать такой код, который мог бы аккуратно с ними справиться без прекращения выполнения приложения. Обработка ошибок — это общее название всех способов такого рода; в данном разделе будту рассмотрены возникновение исключительных ситуаций (exceptions) и методы работы с ними. Исключительные ситуации Исключительная ситуация — это ошибка, возникшая либо в нашем коде, либо в вызванной нашим кодом функции, которая проявилась в период выполнения. В дан
...
Читать дальше »
|
Отладка и обработка ошибок
Итак, к настоящему моменту вы познакомились с основами простого програм- мирования на С#. Перед тем как переходить к рассмотрению объектно-ориентиро- ванного программирования, которому посвящен следующий раздел книги, мы остановимся на вопросах отладки кода на С# и обработки ошибок. Ошибки в программе — это такая вещь, от которой никогда не удастся избавить- ся. Независимо от того, насколько опытным является программист, у него всегда будут проскальзывать ошибки; составной частью понятия "опытный программист" как раз и является понимание этой неизбежности и готовности с ними бороться. Конечно, существуют некоторые незначительные ошибки, которые не оказывают влияния на ход выполнения приложения, такие, например, как ошибки в правопи- сании выводимого текста и т. п. Кроме того, существуют очевидные ошибки, кото- рые приводят к абсолютной невозможности использования при
...
Читать дальше »
|
Делегаты
Делегатом называется тип, который позволяет хранить ссылки на функции. Несмотря на то что звучит это несколько интригующе, механизм, лежащий в основе этой возможности, удивительно прост. Наиглавнейшее предназначение делегатов вряд ли удастся понять до тех пор, пока вы не познакомитесь с событиями и с их обработкой, однако рассмотрение самого понятия делегатов принесет огромную пользу. Когда позднее наступит время их использовать, они будут вам уже знако- мы, что сделает некоторые сложные темы гораздо более легкими для понимания. Объявление делегатов во многом напоминает объявление функций; при этом отсутствует само тело функции, но добавляется ключевое слово delegate. Объяв- ление делегата определяет сигнатуру функции, состоящую из возвращаемого типа и списка параметров. После объявления делегата мы получаем возможность объя- вить переменную типа этого делегата. Мы можем затем инициал
...
Читать дальше »
|
Функции структур
В предшествующей главе рассматривались типы структур, предназначенных для хранения в одном месте нескольких элементов информации. На самом деле воз- можностей у структур гораздо больше, и одной из них является способность содер- жать не только данные, но и функции. На первый взгляд подобное может показаться немного странным, однако на практике это приносит много пользы. 126 Глава 6 В качестве простого примера рассмотрим следующую структуру: struct customerName { . public string firstName, lastName; ' • £ W-Ш •: ,; :шШ : • :тШ-: Ш^ШШШ Ш : '• ': 111 i i t i i i ШШтШ:^ , > .:: •••' Шт Ш Ш ШШЙШШШШМШ ШШ-;• .: -;-; ШШШШ. Если у нас имеются переменные типа customerName и нам необходимо вывести на консоль полное имя, мы будем вынуждены конструировать это имя из его со- ставных частей. Например, ДЛЯ переменной типа customerName С именем customer можно использовать сле
...
Читать дальше »
|
Функция MainQ
Теперь, когда вы познакомились почти со всеми простыми способами, приме- няемыми для создания и использования функций, давайте вернемся назад и более подробно рассмотрим функцию Main (). Как было сказано ранее, функция Main о является точкой входа в приложение на С# и выполнение этой функции охватывает выполнение приложения. У этой функции имеется параметр — string [] args, однако до сих пор мы его не описы- вали. В данном разделе вы познакомитесь с этим параметром и узнаете, каким образом его можно применять. Существуют четыре различные сигнатуры, которые можно использовать для функции Main(): • static void Main() • static void Main(string[] args) 124 Глава 6 • static int Main() • static int Main(string[] args) При желании аргумент args можно опускать. Причина, по которой мы до сих пор пользовались вариантом с этим аргументом,— в том, что такая версия генерируе
...
Читать дальше »
|
Область действия переменных
и другие программные конструкции Перед тем как пойти дальше, следует обратить внимание на то, что важность заявлений, сделанных в предшествующем разделе, далеко выходит за рамки опре- деления области действия переменных в разных функциях. Утверждалось, что об- ласть действия переменных распространяется на блок кода, в котором они описаны, и на все блоки, непосредственно в него вложенные. Это также применимо и к дру- гим типам блоков, например, к программным конструкциям, использующим ветв- ление и циклы. Рассмотрим следующую программу: i n t i ; • -': :;-•.. :v: ' .Л , : for (i = 0; i < 10; i++) { : ' ' string text = *Line * + Convert.ToString(i); Console.WriteLine{*{0}•, text); } Console.WriteLine(*Last text output in loop: {0}", text); В данной программе строковая переменная text является локальной для цикла for. ТаКОЙ КОД не пройдет КОМПИЛЯЦИЮ,
...
Читать дальше »
|
« 1 2 3 4 5 6 7 ... 41 42 »
|
Календарь
« Май 2024 » | Пн | Вт | Ср | Чт | Пт | Сб | Вс | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Статистика
Онлайн всего: 1 Гостей: 1 Пользователей: 0
|