Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C# для чайников

.pdf
Скачиваний:
198
Добавлен:
27.03.2015
Размер:
15.52 Mб
Скачать

Отладчик CLR очень похож на отладчик Visual Studio, поскольку по сути он основан на последнем. Этому отладчику не хватает всего лишь нескольких из наиболее продвинутых возможностей отладчика Visual Studio.

Отсутствующие возможности отладчика

Чего же нет в отладчике CLR, что может обеспечить Visual Studio? В нем отсутствует несколько вещей, но это не вызовет у вас большого огорчения. Ниже перечислены воз­ можности, которых не хватает отладчику CLR по сравнению с отладчиком Visual Studio.

Окна Registers, Disassembly и Auto в отладчике CLR работают не так, как в Vis­ ual Studio, так что они бесполезны для языка С#. Вероятно, вам не потребуются окна Auto или Registers; а при необходимости вы можете использовать отдель­ ный инструмент для дизассемблирования — Ildasm.

Вы не сможете вызвать справку при нажатии на кнопку <F1>. Это неприятно, но можно нормально работать и без этого. Используйте справку, предоставляемую в пакете .NET Framework SDK, как было описано ранее в этой главе.

Этот отладчик можно использовать только для отладки программ платформы

.NET, но не "родной" код Win32. Ну и что? Язык С# полностью основан на плат­ форме .NET.

Нельзя использовать удаленную отладку. Если вам необходима подобная функция, применяйте Visual Studio.

Одной из хороших, но более грубых альтернатив программе SharpDevelop является редактор кода TextPad, показанный на рис. 22.3. С точки зрения комфорта, этот редактор определенно можно считать шагом назад по сравнению с такими программами, как SharpDevelop или Visual Studio. Он намного ближе к работе в командной строке — за ис­ ключением того, что в действительности вам не придется работать в ней, — и имеет большое количество хороших возможностей для редактирования, предназначенных для программистов.

Пробная версия редактора TextPad находится на прилагаемом компактдиске. Если вы захотите использовать этот редактор, вы должны его приоб­ рести. Посетите Web-сайт по адресу www. t e x t p a d . c o m , заплатите (около 30 дол.) и зарегистрируйте свой редактор.

На Web-сайте программы TextPad также находится форум, на котором можно полу­ чить помощь от опытных пользователей TextPad— в основном приверженцев языков Java и Perl, но все же их помощь может быть полезной и для программиста на С#. Неко­ торые программисты С# предпочитают редактор TextPad программе SharpDevelop, за исключением программирования Windows Forms и Web-программирования. Но все же вы должны попробовать обе программы, чтобы определить свои собственные предпоч­ тения. Эта глава может стать решающей причиной для программирования на С# с помо­ щью TextPad. ,

534

Часть VII. Дополнительные главы

На прилагаемом компакт-диске находится демонстрационная программа Pri - orityQueueTextPad, показывающая, как настроить файлы в "проекте" для TextPad. Этот пример основан на программе PriorityQueue, которая рас­ сматривается в главе 15, "Обобщенное программирование".

Рис. 22.3. Редактор TextPad выглядит обманчиво просто

Поскольку редактор TextPad настолько универсален, его следует описать более под­ робно, отчасти как способ представить вам некоторые возможности платформы .NET, которые я не мог бы объяснить в другом месте. Это такие возможности, которые слож­ ные среды разработки наподобие Visual Studio и SharpDevelop имеют тенденцию скры­ вать, но о них стоит знать. Без этого невозможно стать профессионально подготовлен­ ным программистом.

Хотя редактор TextPad на рис. 22.3 выглядит довольно просто, его можно настроить для выполнения удивительного разнообразия полезных задач программирования. Далее приведен список только некоторых возможностей, которые вы обнаружите, познако­ мившись с программой поближе.

Работает со многими языками программирования: TextPad специально разра­ ботан как редактор исходных текстов программ и отлично работает почти с лю­ бым языком программирования; по крайней мере, он имеет встроенную поддерж­ ку для очень многих из них, включая С# и Visual Basic.

Имеет возможность сворачивания документов: в редакторе TextPad вы можете легко работать с множеством исходных файлов программ, как и в его более мощ­ ных собратьях.

Предоставляет отличные возможности редактирования: эти возможности включают поиск пар скобок, закладки для часто посещаемых мест в файлах, ото­ бражение номера строки, проверку правописания, сортировку строк, способность записывать и воспроизводить клавиатурные макрокоманды, ряд встроенных мак-

Глава 22. С# по дешевке

535

рокоманд и многое другое. Блокнот на фоне TextPad— черепаха по сравнению с гепардом.

Обеспечивает хорошие встроенные средства управления файлами: они вклю­ чают в себя инструментарий для сравнения двух файлов, полезный в ряде ситуа­ ций отладки, и команду, которая открывает Windows Explorer в каталоге, содер­ жащем текущий файл.

Но самые главные возможности программы включают следующие действительно по­ лезные функции.

Вы можете настраивать классы документов. Например, можно настроить тип до­ кумента . CS языка С#, включая цвета синтаксиса, шрифт, опции печати и обра­ ботку табуляции для отступов. Каждый класс документа обрабатывается в редак­ торе по-своему. Это похоже на сервис, предоставляемый Visual Studio.

Как и SharpDevelop, редактор TextPad позволяет настраивать ваши собственные команды инструментов в меню Tools. Это предоставляет возможность установить команды для запуска компиляторов, отладчиков и других полезных инструментов непосредственно из редактора. Вы можете также установить команду для запуска своих скомпилированных программ.

Опции настройки инструментов

Prompt for Parameters (запрос параметров). Вашей программе необходимо по­ лучать параметры из командной строки? Это так, если вы планируете, что ваше консольное приложение будет запускаться из командной строки, и вы действи­ тельно используете параметр a r g s функции Main ( ) . Обычно лучше пропустить настройку этой опции.

Run Minimized (выполнять минимизированным). Выбирайте эту опцию, если ваша программа абсолютно никак не взаимодействует (в смысле ввода-вывода) с пользователем. У меня еще не было необходимости использовать эту функцию.

Save АН Documents First (сначала сохранять все документы). При выборе дан­ ной опции происходит сохранение любых документов, открытых вами в редакторе TextPad, перед запуском команды. Я всегда устанавливаю эту опцию.

Capture Output (перехват вывода). Выбор данной опции зависит от того, может ли выполнение команды приводить к сообщениям об ошибках и знаете ли вы пра­ вильный синтаксис "регулярных выражений" для перехвата ошибок. Далее будет описан этот правильный синтаксис.

Одна возможная причина для выбора этой опции возникает, когда, а) вы настраи­ ваете инструмент для фактического запуска своей успешно скомпилированной программы, и б) вы не предполагаете, что пользователь введет что-либо в команд­ ной строке во время выполнения программы. Если программа не является диало­ говой, вы можете при желании использовать эту опцию, чтобы направить поток вывода программы в окно Command Results редактора TextPad вместо окна ко­ мандной строки. Для команды Run следует предпочесть окно командной строки, так что можно не использовать опцию Capture Output.

536

Часть VII. Дополнительные главы

Но совсем другое дело команда Build, которая может (извините, будет!) возвра­ щать сообщения об ошибках. При знании синтаксиса волшебных регулярных вы­ ражений для языка С# вы можете выбрать опцию Capture Output для этих команд, но не для других.

Suppress Output Until Completed (запрет вывода до завершения). Данная опция запрещает вывод, пока программа не закончится. Я обычно оставляю эту опцию неотмеченной.

Sound Alert When Completed (подача звукового предупреждения при заверше­ нии). Если ваша программа долго выполняется (например, долго компилируется), и вы хотели бы в это время выполнять другую работу, эта опция предупредит вас звуковым сигналом о завершении программы.

Чего недостает редактору TextPad, так это удобных инструментов наподобие Solution Explorer, Class View, проектировщика форм и т. д. Вы можете предпочесть SharpDe­ velop, но даже в этом случае редактор TextPad удобен для быстрого редактирования про­ граммы или для универсальной замены Блокнота.

Как известно, существует множество других прекрасных редакторов программ, включая Vi, Fte, Emacs и Brief, большинство из которых предлагают даже больше возможностей (часто за деньги). Некоторые программисты даже кля­ нутся своим любимым редактором.

Из следующих разделов вы узнаете, как настроить редактор TextPad для компилиро­ вания, выполнения и отладки своих программ С#. Действия довольно сложные, но вы попутно получите большое количество интересной дополнительной информации.

Необходимо настроить две вещи в редакторе TextPad, прежде чем он сможет рабо­ тать с С#: класс документов . CS для языка С# и несколько связанных с С# команд в ме­

ню Tools.

Создание класса документов .CS для языка С#

Для создания нового класса документов языка С# в редакторе TextPad выполните следующие действия (которые не проиллюстрированы рисунком).

1.Выберите команду меню Configure^New Document Class.

2.В мастере Document Class Wizard введите C#, чтобы дать название классу,

изатем щелкните на кнопке Next.

3.Введите * . cs в качестве "члена класса". Щелкните на кнопке Next.

4.Установите флажок Enable Syntax Highlighting и затем из списка файлов

подцветки синтаксиса выберите c s h a r p . s y n . Щелкните на кнопке Next,

а затем — на кнопке Finish.

5.Выберите команду меню Configure^Preferences. В иерархическом списке слева выберите пункт Document Classes^Ctt. Справа отметьте желаемые опции для обработки файлов С#, как показано на рис. 22.4.

Я выбрал опции Maintain Indentation, Automatically Indent Blocks, Strip Trailing Spaces from Lines When Saving и Check Spelling of Comments. Все остальные

опции я оставил такими, какими они были по умолчанию.

Глава 22.

С# по дешевке

537

6.В иерархическом списке слева выберите подпункт Tabulation в пункте С#. Введите количество пробелов табуляции и число пробелов для отступа. За­ тем щелкните на кнопке Apply.

Я выбрал размер табуляции и отступа, равный двум для сохранения пространства при печати примеров программ в книге, но вы можете выбрать более удобные размеры. Я также выбрал опции Convert New Tabs to Spaces и Convert Existing Tabs to

Spaces When Saving Files. Некоторые программисты предпочитают табуляцию.

Рис. 22.4. Здесь в редакторе TextPad настраивается класс документов С#

7.Щелкните также слева на пункте Font и установите предпочитаемый шрифт для программы. Затем щелкните на кнопке Apply.

Я выбрал шрифт Lucida Console, обычный, размер 9 пунктов для экрана и принтера.

8.Находясь в диалоговом окне Preferences, просмотрите прочие настройки предпочтений и при желании измените что-либо.

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

9.При выполнении восьмого шага установите еще одну опцию, которая при­

годится позже. В левой панели окна Preferences щелкните на пункте Editor (прямо под пунктами General и File). Справа отметьте последнее поле оп­

ции Use POSIX Regular Expression Syntax.

10.Наконец, когда вы закончите, щелкните на кнопке Apply и затем — на кнопке ОК.

Добавление собственных инструментов: Build С# Debug

Настройка команд меню Tools для компиляции, отладки и запуска программ С# включает в себя добавление в меню инструмента для каждого действия, изменение тек­ ста, который появляется в меню Tools, и дальнейшую настройку инструмента.

В качестве примера выполните следующие действия, чтобы добавить инструмент Build С# Debug для компиляции версии вашей программы, которая может выполняться в отладчике.

538

Часть VII. Дополнительные главы

1.Выберите команду меню Configured Preferences. В левой части диалогово­ го окна Preferences щелкните на пункте Tools.

2.В правой части выберите команду AdddProgram. В диалоговом окне Se­ lect a File перейдите к папке, в которой находится исполняемый файл (. ЕХЕ) инструмента.

Чтобы найти инструменты, рассматриваемые в этой главе, обратитесь к разделу "Получение бесплатных компонентов". Обратите внимание, что отладчик CLR находится в ином месте, чем большинство из них. Он описан в разделе "Запуск отладчика из SharpDevelop" этой главы.

3.Выберите требуемый инструмент — в данном случае Csc. ехе.

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

Между группами инструментов в меню можно разместить тонкую сплошную разделительную линию. Начните с нее при создании нового инструмента. Вы­ берите команду AddoMenu Separator (вместо Program). Для перемещения разделителя (или любого инструмента) используйте волнистые стрелки вверху списка инструментов.

4.Для изменения названия инструмента щелкните на нем дважды в списке справа — но немного медленнее, чем при двойном щелчке. Затем введите

текст, который появится в меню Tools для этой команды. По завершении ввода нажмите <Enter> и затем щелкните на кнопке Apply.

Для своей первой команды компилирования я ввел текст Build С# Debug.

5.Щелкните на новом инструменте, который вы добавили, в пункте Tools диалогового окна Preferences, чтобы появились дополнительные опции, как показано на рис. 22.5.

Справа появятся дополнительные опции, как показано на рис. 22.5, с настройками по умолчанию. Их можно изменить, выполнив следующие действия. В правой части

поле Command уже должно содержать путь к исполняемому файлу инструмента, в поле Parameters, возможно, содержится текст $ F i l e , а в поле Initial Folder — $ F i l e D i r . Для большинства команд это совершенно верно, но вы измените эти значения для нескольких первых инструментов, которые настраиваете.

6. В поле ввода Parameters введите следующее:

/ d e b u g / o u t : $ F i l e D i r \ b i n \ d e b u g \ P r o g r a m . е х е © r e f s . r s p * . c s

7. Установите флажки Save All Documents First и Capture Output. Затем

щелкните на кнопке Apply.

Оставьте другие флажки неотмеченными.

8. Выберите поле Regular Expression to Match Output и аккуратно введите

следующую строку, затем щелкните на кнопке Apply:

Л( [*.']+.св)\( ( [0-9]+) , ( [0-9]+)\)

Ниже будет кое-что пояснено из этого марсианского стихотворения.

Глава 22. С# по дешевке

539

Рис. 22.5. Опции настройки вашего первого инструмента

9. Установите поля Registers так, чтобы в них были значения 1, 2 и 3.

10. Щелкните на кнопке Apply и затем на кнопке ОК, чтобы закрыть диалого­

вое окно Preferences.

Далее вы настроите дополнительные инструменты таким же двухэтапным способом, описанным ниже.

1. Создайте инструмент, как описано выше.

Вследующих разделах будут рекомендоваться названия для каждого инструмента.

2.Настройте свой новый инструмент путем его выбора в левой части диало­ гового окна Preferences и заполнения детальной информации в правой части.

Вследующих разделах такая детальная информация будет представлена для каж­ дого инструмента.

Настройка инструмента для компиляции финальной версии

После полной отладки и проверки программы вы упаковываете финальную версию и выпускаете ее в свет. Для настройки инструмента компиляции окончательной версии следуйте приведенной инструкции.

Program to Run (программа для запуска). При создании инструмента перейдите к C s c . е х е (ищите папку, описанную в разделе "Получение бесплатных компо­ нентов" этой главы).

Menu Name (название меню). Введите B u i l d С# R e l e a s e .

Command (команда). Настраивается, когда вы создаете пункт меню инструмента и указываете программу, которая запускается для этого инструмента: Csc . ехе .

Parameters (параметры). При настройке инструмента введите в это поле текст / o u t : $ F i l e D i r \ b i n \ r e l e a s e \ P r o g r a m . е х е © r e f s . r s p * . c s (теперь без ключа /debug). Затем заполните пункты в оставшейся части этого списка.

Initial Folder (начальный каталог). Оставьте это поле без изменений.

540

Часть VII. Дополнительные главы

Options (опции). Установите флажки Save All Documents First и Capture Output

(остальные не установлены).

Regular Expression (регулярное выражение). Щелкните на кнопке Apply, снова откройте инструмент Build С# Debug, выделите регулярное выражение, нажмите комбинацию клавиш <Ctrl+C> для его копирования, выберите инструмент Build С# Release и поле Regular Expression и нажмите комбинацию клавиш <Ctrl+V> для вставки регулярного выражения. Щелкните на кнопке Apply. Избегайте по­ вторного ввода этого монстра!

Registers (регистры). Введите в ячейки 1,2 и 3.

Теперь в редакторе TextPad имеются два инструмента. Позже вы добавите еще не­ сколько, но те инструменты, которые были только что настроены, требуют небольшого пояснения и некоторых настроек.

Объяснение опций настройки инструментов Debug и Release

Для некоторых компиляций командная строка может нуждаться в изменениях. В этих случаях вы должны временно перенастраивать инструменты компилирования в редакто­ ре TextPad или создавать специальный файл для сохранения дополнительных опций.

Япредпочитаю последний подход.

Вследующих разделах рассматриваются все опции в полях Parameters инструмен­ тов Build С# Debug и Build С# Release, а также объясняются опции Regular Expres­ sion и Registers.

Ключ /debug

Первым параметром в поле Parameters инструмента Build С# Debug (но не инстру­ мента Build С# Release) является ключ / d e b u g .

В некоторых программах используются ключи командной строки, которые предос­ тавляют пользователю возможность настраивать поведение программы. Для инструмен­ тов редактора TextPad, которым необходимы такие ключи, они вводятся в поле Pa­ rameters. Например, ввод строки /debug * .cs дает команду компилятору С# запус­ тить отладочную версию процесса компиляции.

Ключи командной строки отличаются от ее параметров. Символ $ F i l e — это параметр, указывающий редактору TextPad имя файла, который является теку­ щим в данный момент в редакторе. Редактор TextPad передает эту информа­ цию инструменту при его запуске.

Но если вам, к примеру, нужно указать отладочную версию при запуске компилятора, то необходимо использовать ключ, который понимает компилятор: для языка С# таким ключом является / d e b u g . Другие команды определяют другие ключи. Выяснить, какие ключи доступны, обычно можно путем ввода в окне команды имени команды, за кото­ рым следует пробел, символ наклонной черты и вопросительный знак. Например, можно ввести esc. ехе / ? , чтобы узнать, какие ключи компилятора С# имеются (как и уточ­ нить остальную часть синтаксиса команды). Ключи имеют названия и начинаются с сим­ вола / или -.

Глава 22. С# по дешевке

541

В своем консольном приложении вы также можете определить ключи команд­ ной строки. Не забудьте включить метод для предоставления справки по вашим ключам, когда пользователь введет YourProgram.ехе /? Другими словами, функция Main () должна получать аргументы командной строки и искать сре­ ди них ключ / ? , а затем выводить справочную информацию.

Ключ /out

Ключ /out в поле Parameters позволяет указать, где компилятор должен помещать компилируемую программу для работы. Значением по умолчанию является $FileDir. В следующем списке объясняется информация, использованная в ключе /out для ко­ манды Build С# Debug.

$FileDir: этот "макропараметр" сообщает редактору TextPad о месте расположения ваших исходных файлов С# (* . cs). При компиляции про­ граммы из редактора TextPad компилятор помещает результирующие файлы . ЕХЕ, . DLL и другие файлы компиляции, такие как информация отладки (в файле . PDB), в тот же каталог по умолчанию.

Жизнь будет проще, если скопировать структуру каталогов, которая ис­ пользуется в программах Visual Studio и SharpDevelop. Это позволяет компилировать одинаковую программу в любой из этих сред с аналогич­ ной структурой. В Visual Studio файлы компиляции помещаются в подкаталог подкаталога $FileDir: для отладочной версии это $FileDir\bin\Debug,

для окончательной— $FileDir\bin\Release.

Для подражания программе Visual Studio создайте вручную подкаталоги в папке вашего проекта и включите ключ /out в поле Parameters по об­ разцу: /out: $FileDir\bin\release\Program.exe. Выполняйте эти действия как часть настройки каждого проекта.

Для поиска других макросов наподобие $FileDir введите "tools" в спра­ вочной системе TextPad и выберите тему "Tool Parameter Macros".

P r o g r a m . ехе: ключ /out можно использовать для определения имени программы. В Visual Studio класс, включающий функцию Main ( ) , по умолчанию называется P r o g r a m , и файл, содержащий этот класс, назы­ вается P r o g r a m , сs. (при желании можно изменить одно или оба эти на­ звания.) Вы также можете вручную изменить имя файла с расширением

. ЕХЕ в ключе / out на что-нибудь другое. Возможно, вам не нравится на­

зывать каждый файл с расширением

. ЕХЕ "Program". Для ввода другого

названия просто откройте диалоговое окно Configuration

для инструмента

компиляции и замените строку P r o g r a m в ключе

/out

другим названи­

ем. Я использую строку

"Program.exe"

в качестве

заполнителя, так как

в поле Parameters нужно

что-нибудь ввести.

 

 

Параметр @refs.rsp

Параметр Orefs.rsp позволяет упростить уже пугающую командную строку для инструментов компиляции редактора TextPad. Хитрость заключается в том, чтобы со­ хранить набор дополнительных параметров в текстовом файле в каталоге вашего проекта и обращаться к нему из командной строки, указывая этот файл. Компилятор С# читает

542

Часть VII. Дополнительные главы

файл и добавляет его содержимое к командной строке. Этот файл используется как с от­ ладочной, так и с финальной версиями.

Для использования данной возможности командной строки вашего инструмента вы­ полните следующие действия.

1.В редакторе TextPad выберите команду меню File^New для создания ново­ го файла.

2. В начале файла введите: # Файл настройки для компиляций С#.

3.Сохраните файл с именем r e f s. rs p в каталоге вашего проекта.

Убедитесь в том, что поле Save as Туре в диалоговом окне Save as установлено вА1 1 Files (*.*).

Что содержится в файле настройки

Эти файлы в основном применяются для ссылок на пространства имен, которые ис­ пользуются вами. Каждый раз, когда директива using, такая как using System;, по­ мещается в начало исходного файла С#, компилятору необходима информация о том, где искать классы из этого пространства имен, т.е. имя и расположение файла . DLL, кото­ рый связан с пространством имен, упомянутым в директиве using.

ВVisual Studio вы отправляете компилятор к соответствующему файлу . DLL (называемому сборкой (assembly)), выбирая команду меню Project^Add Reference. (Этот шаг не нужен для подмножества библиотеки .NET, для которой в компиляторе уже имеются собственные предопределенные ссылки: обычно используемые элементы находятся в файле Mscorlib. dll. Ниже будет дано объяснение, как определить, что это за элементы.)

Винструментах компиляции редактора TextPad (Debug и Release) вы выполняете ту же операцию посредством ключа /reference (/г для краткости). Вы могли бы помес­ тить свои ключи /г (по одному для каждой директивы using) прямо в командной стро­ ке (другими словами, в поле Parameters для ваших инструментов компиляции, вместо файла @ref s . rsp).

Да, вы могли бы это сделать. Но только представьте себе, каким длинным стало бы содержимое командной строки в таком небольшом поле Parameters!

Пример файла настроек

Размещение элементов наподобие ключей — это именно то, для чего предназна­ чен файл настройки. В приведенном далее файле содержится пара ключей /г:

# файл н а с т р о й к и для приложений С#

/г:System.Windows.Forms.dll

:"С:\Program Files\NUnit 2.2\bin\nunit.framework.dll"

Этот простой файл настройки включает комментарий (первая строка, начинающаяся с #) и два ключа / reference, каждый на отдельной строке. Первый ключ ссылается на файл . DLL, содержащий классы в пространстве имен System. Windows . Forms, а вто­ рой — на файл . DLL для инструмента тестирования NUnit. Данный инструмент является библиотекой классов .DLL сторонних производителей. Эти строки не являются кодом языка С#, поэтому они не заканчиваются точкой с запятой. Вторая строка заключена в кавычки, потому что путь к файлу содержит пробелы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]