Полиморфизм, что по-гречески означает "множество форм", — это свойство, позволяющее одному интерфейсу получать доступ к общему классу действий. Простымпримером полиморфизма может служить руль автомашины, который выполняетодни и те же функции своеобразного интерфейса независимо от вида применяемогомеханизма управления автомашиной. Это означает, что руль действует одинаково независимо от вида рулевого управления: прямого действия, с усилением или реечнойпередачей. Следовательно, при вращении руля влево автомашина всегда поворачиваетвлево, какой бы вид управления в ней ни применялся. Главное преимущество единообразного интерфейса заключается в том, что, зная, как обращаться с рулем, вы сумеетеводить автомашину любого типа.
Тот же самый принцип может быть применен и в программировании. Рассмотримдля примера стек, т.е. область памяти, функционирующую по принципу "последнимпришел — первым обслужен". Допустим, что в программе требуются три разных типастеков: один — для целых значений, другой — для значений с плавающей точкой, третий — для символьных значений. В данном примере алгоритм, реализующий все этистеки, остается неизменным, несмотря на то, что в них сохраняются разнотипные данные. В языке, не являющемся объектно-ориентированным, для этой цели пришлось бысоздать три разных набора стековых подпрограмм с разными именами. Но благодаряполиморфизму для реализации всех трех типов стеков в C# достаточно создать лишьодин общий набор подпрограмм. Зная, как пользоваться одним стеком, вы сумеетевоспользоваться и остальными.
В более общем смысле понятие полиморфизма нередко выражается следующимобразом: "один интерфейс — множество методов". Это означает, что для группы взаимосвязанных действий можно разработать общий интерфейс. Полиморфизм помогаетупростить программу, позволяя использовать один и тот же интерфейс для описанияобщего класса действий. Выбрать конкретное действие (т.е. метод) в каждом отдельномслучае — это задача компилятора. Программисту не нужно делать это самому. Емудостаточно запомнить и правильно использовать общий интерфейс.Наследование
Наследование представляет собой процесс, в ходе которого один объект приобретает свойства другого объекта. Это очень важный процесс, поскольку он обеспечиваетпринцип иерархической классификации. Если вдуматься, то большая часть знанийподдается систематизации благодаря иерархической классификации по нисходящей.Например, сорт яблок "Джонатан" входит в общую классификацию сортов яблок,которые, в свою очередь, относятся к классу фруктов, а те — к еще более крупномуклассу пищевых продуктов. Это означает, что класс пищевых продуктов обладает рядом свойств (съедобности, питательности и т.д.), которые по логике вещей распространяются и на его подкласс фруктов. Помимо этих свойств, класс фруктов обладает своими собственными свойствами (сочностью, сладостью и т.д.), которыми он отличаетсяот других пищевых продуктов. У класса яблок имеются свои характерные особенности(растут на деревьях, не в тропиках и т.д.). Таким образом, сорт яблок "Джонатан" наследует свойства всех предшествующих классов, обладая в то же время свойствами,присущими только этому сорту яблок, например красной окраской кожицы с желтымбочком и характерным ароматом и вкусом.
Если не пользоваться иерархиями, то для каждого объекта пришлось бы явно определять все его свойства. А если воспользоваться наследованием, то достаточно определить лишь те свойства, которые делают объект особенным в его классе. Он может также наследовать общие свойства своего родителя. Следовательно, благодаря механизмунаследования один объект становится отдельным экземпляром более общего класса.Первая простая программа
А теперь самое время перейти к примеру конкретной программы на С#. Для начала скомпилируем и выполним короткую программу./* Это простая программа на С#. Назовем ее Example.cs.*/using System;class Example { // Любая программа на C# начинается с вызова метола Main(). static void Main() { Console.WriteLine("Простая программа на С#."); }}
Основной средой для разработки программ на C# служит Visual Studio корпорацииMicrosoft. Для компилирования примеров всех программ, приведенных для примерав этой книге, в том числе и тех, где используются новые средства C# 4.0, вам потребуется Visual Studio 2010 или же более поздняя версия, поддерживающая С#.
Создавать, компилировать и выполнять программы на С#, используя Visual Studio,можно двумя способами: пользуясь, во-первых, интегрированной средой разработкиVisual Studio, а во-вторых, — компилятором командной строки csc.ехе. Далее описываются оба способа.Применение компилятора командной строки csc.ехе
Для коммерческой разработки программ вам, скорее всего, придется пользоваться интегрированной средой Visual Studio, хотя для некоторых читателей более удобным может оказаться компилятор, работающий в режиме командной строки, особенно для компилирования и выполнения примеров программ, приведенных в этойкниге. Объясняется это тем, что для работы над отдельной программой не нужносоздавать целый проект. Для этого достаточно написать программу, а затем скомпилировать и выполнить ее, причем все это делается из командной строки. Такимобразом, если вы умеете пользоваться окном Командная строка (Command Prompt)и его интерфейсом в Windows, то компилятор командной строки окажется для васболее простым и оперативным инструментальным средством, чем интегрированнаясреда разработки.
ПРЕДОСТЕРЕЖЕНИЕЕсли вы не знаете, как пользоваться окном Командная строка, то вам лучше работатьв интегрированной среде разработки Visual Studio. Ведь пытаться усвоить одновременнокоманды интерфейса Командная строка и элементы языка C# не так-то просто, несмотряна то, что запомнить эти команды совсем нетрудно.
Для написания и выполнения программ на C# с помощью компилятора команднойстроки выполните следующую несложную процедуру.
Введите исходный текст программы, используя текстовый редактор.
Скомпилируйте программу с помощью компилятора csc.ехе.
Выполните программуВвод исходного текста программы
Исходный текст примеров программ, приведенных в этой книге, доступен для загрузки по адресу www.mhprofessional.com. Но при желании вы можете сами ввести исходный текст этих программ вручную. Для этого воспользуйтесь избраннымтекстовым редактором, например Notepad. Но не забывайте, что вы должны создатьфайлы, содержащие простой, а не отформатированный текст, поскольку информацияформатирования текста, сохраняемая в файле для обработки текста, может помешатьнормальной работе компилятора С#. Введя исходный текст программы, присвойте еефайлу имя Example.cs.Компилирование программы
Для компилирования программы на C# запустите на выполнение компиляторcsc.ехе, указав имя исходного файла в командной строке.С:>csc Example.cs
Компилятор csc создаст файл Example.ехе, содержащий версию MSIL даннойпрограммы. Несмотря на то что псевдокод MSIL не является исполняемым кодом, онсодержится в исполняемом файле с расширением .ехе. Среда CLR автоматически вызывает JIT-компилятор при попытке выполнить файл Example.ехе. Следует, однако,иметь в виду, что если попытаться выполнить файл Example.ехе (или любой другойисполняемый файл, содержащий псевдокод MSIL) на том компьютере, где среда .NETFramework не установлена, то программа не будет выполнена, поскольку на этом компьютере отсутствует среда CLR.
ПРИМЕЧАНИЕПрежде чем запускать на выполнение компилятор csc.ехе, откройте окно Команднаястрока, настроенное под Visual Studio. Для этого проще всего выбрать команду Visual Studio→Инструменты Visual Studio→Командная строка Visual Studio (Visual Studio→VisualStudio Tools→Visual Studio Command Prompt) из меню Пуск→Все программы (Start→AIIPrograms) на панели задач Windows. Кроме того, вы можете открыть ненастроенное окноКомандная строка, а затем выполнить командный файл vsvars32.bat, входящийв состав Visual Studio.Выполнение программы