Управляемый и неуправляемый код

При написании программы на C# программист создаёт так называемый управляемый код, который исполняется под контролем независимой от языка среды исполнения CLR. Поскольку программа запускается под контролем CLR, управляемый код должен соответствовать определенным требованиям. Требования такие: компилятор должен создать MSIL - файл, предназначенный для CLR, а также использовать библиотеки.NET Framework. Альтернативой является неуправляемый код, который не выполняется CLR. До появления.NET Framework все Windows - программы использовали его. Сейчас эти два подхода могут работать вместе.

Создание проекта.

Запустить Microsoft Visual Studio 2005 и выполнить команду «Создать проект…», как показано на рисунок 1.1, или нажать комбинацию клавиш <Ctrl+Shift+N>.

Рисунок 1.1 Стартовое окно Microsoft Visual Studio 2005.

На экране появится диалоговое окно «New Project» (рисунок 1.2), где следует задать необходимые параметры проекта: тип проекта (Project types), шаблон (Templates), имя проекта (Name), расположение во внешней памяти (Location) и наименование решения (Solution Name). Флажок Create directory for solution оставить включенным.

Рисунок 1.2 Диалоговое окно задания параметров нового проекта

 

В результате выполненных действий в окне проводника Solution Explorer появится структура созданного проекта и откроется модуль Program.cs (рисунок 1.3).

Рисунок 1.3 Созданный проект в развернутом виде

Теперь можно приступать к программированию.

Пример 1. Простейшая программа на языке C# выглядит следующим образом:

using System;

 

namespace Lab_1

{

class Program

{

static void Main(string[] args)

{

// Вывод предложения на экран

System.Console.WriteLine("Привет, C#!\n");

Console.ReadKey();

}

}

}

 

Анатомия программы.

Пространство имен в С# представляет собой совокупность связанных типов. Некоторые пространства имен, например, System, очень велики и могут включать более 100 разного рода типов; другие пространства имен, например, System.Timers, содержат всего по несколько типов. Типы DateTime и Math входят в пространство имен System.

Использование пространств имен (также называемых пакетами, библиотеками или интерфейсами прикладного программирования, API от Application Programming Interface) — это практическая реализация концепции повторного использования, принципа, чрезвычайно поощряемого в современной программной инженерии.

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

Программа в примере начинается с заявления, что она собирается использовать пространство имен System, в частности, класс System.Console, содержащий методы для работы с консолью.

Внутри пространства имен Lab_1 объявляется класс Program вместе с его содержимым вслед за открывающей фигурной скобкой. Имена файла и программы (т. е. имя класса) не обязательно должны совпадать, хотя обычно они или одинаковы, или схожи. В языке C# отсутствуют глобальные переменные и функции, поэтому все объявления переменных и функций должны находиться внутри объявления класса (количество классов неограниченно).

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

Содержательные действия программы ограничивается выводом на экран некоторого текста и ожидания нажатия любой клавиши. Вывод осуществляется с помощью метода Console.WriteLine; для ожидания нажатия клавиши используется метод Console.ReadKey.

В языке C# нет заголовочных файлов. Все методы для работы с консолью содержатся в классе Console пространства имен System. Метод вызывается оператором принадлежности (.). Иными словами, чтобы вызвать WriteLine() объекта Console, следует написать Corsole. WriteLine(…), поставив вместо многоточия выводимую строку.

Запуск программы осуществляется выполнением команды меню Debug ® Start Debugging, или нажатием клавиши F5. Если в компилятор не обнаружил ошибок, то на экран выводится консольное окно с результатом работы программы (рисунок 1.4).

Рисунок 1.4 Консоль с результатами выполнения программы

Пример 2. Пусть необходимо вычислить значение функции y:

Некорректные ситуации при вычислении возможны, если: , , .

Фрагмент кода C#, который реализует вычисление функции, представлен ниже.

int a, b, x;

double y;

a = 7;

b = 10;

x = -10;

y = Math.Pow(x, 2); // Вычисление y = x^2

if ((x == 0) || (b <= 0) || (b == y))

{

Console.WriteLine("Вычисление невозможно!");

}

Else

{

y = (a * y - b) / Math.Log10(b / y);

Console.WriteLine("Значение y: {0}", y);

}

Console.ReadKey();

 

В этой программе вначале объявляются переменные a, b, x типа int, а также переменная y типа double. При объявлении переменных для них резервируется место в оперативной памяти, а идентификаторы (имена) переменных представляют собой ссылки на соответствующие места в памяти. Так, например, идентификатор b является ссылкой на область памяти размером 2 байта (для типа данных int), а идентификатор y является ссылкой на область памяти размером 4 байта (для типа данных double).

Далее следует 4 операции присваивания на основе оператора присваивания (=). Первые три операции присваивания обеспечивают инициализацию переменных a, b, x. Фактически при этом в области памяти, связанные с этими переменными заносятся указанные справа от оператора присваивания “=” константы (в примере числа 7,10, –10). Четвертая операция присваивания отличается от первых трех тем, что в правой части записано выражение, значение которого вычисляется и присваивается указанной слева переменной y. Можно сказать также, что переменная y инициализируется значением выражения. В этом выражении Math — наименование класса пространства имен System, который содержит методы для вычисления математических функций, таких как Pow (возведение в степень) или Log10 (вычисление десятичного логарифма), и др.

Структурный оператор ветвления if … else предназначен здесь для проверки возможности вычисления,чтобы исключить ошибки выполнения (например, деление на ноль). Этот оператор рассматривается подробно в теоретических положениях к лабораторной работе №2.

Перечень математических функций, которые могут быть использованы при вычислении значений заданных функций:

Функция Назначение
Abs(Double) Возвращает абсолютное значение аргумента
Exp(Double) Вычисляет значение экспоненты в степени аргумента
Log(Double) Вычисляет логарифм натуральный от аргумента
Log10(Double) Вычисляет логарифм десятичный от аргумента
Log(Double, Double) Вычисляет логарифм от аргумента 1 по основанию аргумента 2
Pow(Double, Double) Вычисляет значение аргумента 1 возведенного в степень аргумента 2
Sqrt(Double) Вычисляет значение квадратного корня из значения аргумента

 

Некоторые приемы упрощенного решения вычислительных задач:

Выражение Вариант вычисления
x 2 x * x
x 3 x * x * x
Math.Sqrt(Math.Sqrt(x))
p =1/ n; Math.Pow(x, p)
p = m / n; Math.Pow(x, p)

Задание.

1. Создать консольное приложение так, как показано в примере 1.

2. Запустить программу и убедиться в корректности ее выполнения.

3. Дополнить функцию Main кодом, который вычисляет значение математической функции y в соответствии с индивидуальным заданием и выводит его на консоль. Значения аргументов задать явным присваиванием констант. При невозможности вычисления вывести на консоль сообщение.

4. Составить блок-схему алгоритма функции Main.

5. Выполнить контрольный просчет и сделать вывод.

Таблица 1.1 Варианты заданий:

     
     
     
     
     
     
     
     
     
     

Содержание отчета:

- тема, цель, задание, в том числе индивидуальная часть и номер варианта;

- листинг программы;

- консольное окно с результатами работы программы;

- блок-схема алгоритма;

- контрольный просчет;

- вывод по работе.

 

Контрольные вопросы.

  1. Какие языки программирования поддерживает Microsoft Visual Studio?
  2. Что такое Microsoft.NET?
  3. Что такое.NET Framework?
  4. Что такое CLR?
  5. Описать процесс компиляции C#.
  6. Что такое MSIL?
  7. Что такое управляемый код и чем он отличается от управляемого?
  8. Как создать проект в MS Visual Studio?
  9. Что такое консольное приложение?
  10. Что такое пространство имен?
  11. Каково назначение метода Main()?
  12. Что такое объектно-ориентированное программирование?
  13. Дать понятие класса и объекта, объяснить отличия, привести пример.
  14. Перечислить и охарактеризовать этапы ООП.
  15. Какова структура класса в С#?
  16. Что такое конструктор?
  17. Что такое свойство?
  18. Что такое метод?
  19. Что такое инкапсуляция?
  20. Как вызвать метод объекта?
  21. Как связаны свойства и методы объекта?
  22. Как объекты взаимодействуют со средой CLR?
  23. Перечислить стандартные классы, задействованные в программе, а также их методы.
  24. Пояснить смысл предложения C#: System.Console.WriteLine(…)
  25. Как при помощи среды откомпилировать и выполнить проект?

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: