Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема-05-01испр.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
860.39 Кб
Скачать
  1. Связывание с dll

Первым делом свяжем два построенных проекта, для чего в консольный проект добавим ссылку на проект с DLL ClassLibraryMath. Для этого в окне Обозреватель решений (Solution Explorer) подведем указатель мыши к имени консольного проекта и из контекстного меню, появляющегося при щелчке правой кнопки, выполним команду Добавить ссылку (Add Reference). В открывшемся окне добавления ссылок выберем вкладку Проект (Projects). Поскольку проект ClassLibraryMath не включен в текущее Решение, то он автоматически не появится в открывшемся окне. Если ссылку нужно установить на проект, не включенный в Решение, как в нашем случае, то в окне добавления ссылок нужно задать путь к проекту. Для этого необходимо щелкнуть на вкладке Обзор и задать путь к проекту ClassLibraryMath, в папке …\bin\Relase\ClassLibraryMath.dll которого и находится нужный файл. После этого добавления ссылка на DLL появится в папке Ссылки (References) консольного проекта. Теперь проекты связаны и из консольного проекта доступны сервисы, предоставляемые соответствующей библиотекой DLL.

  1. Организация консольного интерфейса

Задача программного кода, который непосредственно встроен в уже созданную процедуру Main( ), достаточно понятна. Дадим краткие комментарии к этому коду:

Входные данные устроены просто – задается лишь одна переменная x типа Double.

Вводу значения x предшествует, как и положено для хорошего стиля программирования, приглашение к вводу. Для ввода и вывода значений используются статические методы ReadLine( ) и WriteLine( ) класса Console, входящего в библиотеку FCL и предоставляющего свои сервисы пользователям консольных приложений. Для преобразования введенных данных, представляющих собой строки текста, к нужному типу (в нашем случае к типу Double) используются статические методы класса Convert, сервисы которого позволяют проводить различные преобразования между типами данных.

Значение функции Sin(x) вычисляется двумя разными методами – методом стандартного класса Math и методом класса ClassLibraryMath.

В коде применяется стандартный прием зацикливания тела метода Main( ), позволяющий пользователю самому решать, когда прервать выполнение метода.

На Рис. 5.1-15 показаны результаты работы консольного проекта.

Рис. 5.1-15. Результаты работы консольного проекта

Анализируя эти результаты можно видеть, что два метода на всех исследуемых аргументах дают одинаковые результаты, совпадающие с точностью до 9 цифр после запятой. Точность методов в классе MyMath обеспечивается константой EPS этого класса. Достигнутая точность вполне достаточна для большинства практических задач. Остается понять, насколько написанные нами методы проигрывают методу стандартного класса по времени.

Консолью называется окно операционной системы, в котором пользователи взаимодействуют с операционной системой или текстовым консольным приложением путем набора текстового ввода с клавиатуры и чтения текстового вывода с экрана компьютера. Например, в Windows консоль называется окном командной строки и принимает команды MS-DOS. Класс Console предоставляет базовую поддержку приложениям, считывающим символы с консоли и записывающим их на консоль.

Когда консольное приложение начинает работу, операционная система автоматически связывает с консолью три потока ввода-вывода. Приложение может считывать пользовательский ввод из стандартного входного потока, записывать обычные данные в стандартный выходной поток и записывать данные об ошибках в стандартный поток сообщений об ошибках. Эти потоки представлены в приложении значениями свойств In, Out и Error.

По умолчанию значением свойства In является объект System.IO..::.TextReader, а значениями свойств Out и Error - объекты System.IO..::.TextWriter.

Члены класса Console, работающие нормально, когда базовый поток направлен на консоль, могут выбрасывать исключение, если поток перенаправлен, например, в файл. Поэтому в приложениях следует перехватывать исключение System.IO..::.IOException, если стандартный поток перенаправлен.

Двумя тесно связанными между собой элементами консоли являются буфер экрана и окно консоли. Текст в реальности считывается из потоков и записывается в потоки, принадлежащие консоли, но кажется, что он считывается из принадлежащей консоли области, называемой буфером экрана, и записывается в эту область. Буфер экрана является атрибутом консоли, он организован в виде прямоугольной сетки строки и столбцов, в которой каждое пересечение строки и столбца, или символьная ячейка, содержит один символ. Каждый символ имеет собственный цвет, и каждая символьная ячейка имеет собственный цвет фона.

Содержимое буфера экрана просматривается через прямоугольную область, называемую окном консоли. Окно консоли является еще одним атрибутом консоли; это не сама консоль, которая является окном операционной системы. Окно консоли также организовано в виде строк и столбцов, а его размер меньше или равен размеру буфера экрана; при этом окно консоли можно перемещать для просмотра разных областей буфера экрана, с которым оно связано. Если буфер экрана больше окна консоли, в этом окне автоматически отображаются полосы прокрутки, чтобы окно консоли можно было репозиционировать относительно буфера.

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

Началом координат сетки символьных ячеек в буфере экрана является его верхний левый угол, и позиция курсора в окне консоли измеряется относительно этого начала координат. Для указания позиции используются индексы, отсчитываемые от нуля, то есть самая верхняя строка, и крайний слева столбец имеют индекс 0. Максимальное значение индексов строки и столбца определяется значением свойства Int16..::.MaxValue.

Класс Console содержит методы для чтения с консоли отдельных символов или целых строк, а также несколько методов записи, автоматически преобразующие экземпляр типа значения, массив символов или набор объектов в форматированную или неформатированную строку и затем записывающие эту строку, а за ней необязательную строку, идентифицирующую конец строки данных. Также класс Console содержит методы и свойства, позволяющие получить или задать размер буфера экрана, окна консоли и курсора, изменить положение окна консоли и курсора, переместить или удалить данные в буфере экрана, изменить цвета фона и текста, изменить текст, отображаемый в строке заголовка консоли и воспроизвести звук.

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

Public Shared Sub Main()

Console.Write("Hola ")

Console.WriteLine("Mundo!")

Console.WriteLine("What is your name: ")

Dim name As String = Console.ReadLine()

Console.Write("Buenos Dias, ")

Console.Write(name)

Console.WriteLine("!")

End Sub 'Main

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