C# ВВЕДЕНИЕ О КОМПЬЮТЕРЕ ПАМЯТЬ Область кода, область данных. Код – последовательность команд. В типичной команде могут быть указаны данные (операнды) и оператор. Например, взять из памяти по адресам i и j данные, произвести операцию (например, сложения), записать результат по адресу k. ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР (ЦП) Выбирает команду из кода, выбирает данные, указанные командой, передает в АЛУ на выполнение команды. Посылает результат в память по указанному адресу. О СРЕДЕ MS Visual Studio 2013-15. Help. Как создать новый проект типа Console Application. Где файлы программы? Как упаковать, распаковать. ПРОСТАЯ ПРОГРАММА Ввод числа с клавиатуры. Цикл. Вывод результата на экран. // Описание и ввод локальных переменных с клавиатуры. Это комментарий Console.Write("Введите число слагаемых n = ");// Вывод строки на экран string str;// описание локальной переменной строки str = Console.ReadLine();// ввод строки с клавиатуры int n;// описание локальной целой переменной n = int.Parse(str);// преобразование строки, введенной с консоли, в целое число // Вычисление суммы натуральных чисел от 1 до n int sum = 0;// Описание и инициализация переменной, в которой будет накапливаться сумма for (int k = 1; k <= n; k = k + 1 /*или k+=1 или k++*/)// Организация цикла по индексу k sum = sum + k;//или sum+=k; // Работа цикла с перечислением: // 1. Секция инициализации int k = 1; // 2. Секция проверки условия продолжения цикла k<=n; // если условие выполняется, выполняются операторы, стоящие в теле цикла: // в данном случае один оператор sum= sum+k; // 3. Секция изменения параметра цикла k = k+1 или, чаще пишут, k++ // Опять секция проверки условия k <= n; // если условие выполняется, выполняются операторы, стоящие в теле цикла. // Таким образом, секция инициализации выполняется один раз в начале выполнения цикла // Далее идет сам цикл: секция проверки 2 -> операторы или завершение -> секция 3 -> секция 2->… // Вывод результата счета на экран Console.WriteLine("sum = {0}; контрольное значение {1}", sum, n * (n + 1) / 2); // Задержка завершения приложения до нажатия Enter Console.ReadLine(); О ЯЗЫКЕ Текст программы состоит из описания данных и кода (операторов). Все данные объединены в поля, а операторы – в методы. Внутри метода могут быть также описаны данные – это локальные переменные. Они существуют только во время выполнения метода. На время выполнения метода выделяется специальная память, в которую помещаются параметры метода и внутри которой определяются локальные переменные. Это стек метода. 1 ©Фомин Георгий Викторович ДАННЫЕ При описании данных указывается тип. Например, int i; - описание, указывающее, что в переменной i хранится число целого типа int. Вообще тип данных объединяет в себе два качества – сколько памяти занимает экземпляр типа, и какие операции могут выполняться. Так экземпляры типа int занимают по 4 байта или 32 бита. Официальное имя типа Int32. С типом int можно, в частности, выполнять арифметические операции – сложение, вычитание, умножение, деление. Экземпляры типа int можно сравнивать между собой, получать их текстовое выражение (превращать в строку символов), из строки символов можно получать экземпляр типа int, если, конечно, символы формируют выражение целого числа. Все сведения о типе можно получить, наведя курсор на имя типа Int32 (или int – это псевдоним, или alias) и нажав F1. МЕТОДЫ Поименованные фрагменты кода. Весь код, то есть все операторы языка C# находятся в методах. Основной метод любой программы на C# это метод Main Любая программа на C# начинается с выполнения первого оператора метода Main и завершается после выполнения последнего оператора этого метода. Описание любого метода содержит в себе следующие элементы 1. Тип переменной, которую метод возвращает. Глагол «возвращает» в данном контексте означает, что метод производит операции с данными (выполняет операторы), в результате которых получает значение некоторой величины. Это подобно функции в математике. Значение возвращаемой величины может быть использовано после завершения выполнения метода. Именно этот тип и указывается в заголовке метода. Метод может ничего не возвращать, тогда в качестве типа указывается служебное слово void (пустота). 2. Имя метода – это идентификатор, который именует метод. Он произвольный. 3. Круглые скобки (). Внутри скобок может находиться список параметров метода, если параметры есть. Если параметров нет, скобки все равно должны быть. 4. Наконец, описание метода предполагает наличие внутри него операторов. Все операторы метода заключаются в фигурные скобки {}. Если метод возвращает значение, то среди операторов обязательно должен быть оператор return. За оператором return должен следовать идентификатор экземпляра того типа, который указан в заголовке, либо выражение, в результате которого такой экземпляр получается. Примером описания является метод Main, предлагаемый средой по умолчанию. Он ничего не возвращает (void) и имеет один параметр. В описании параметра указывается его тип и, через пробел, имя. В случае метода Main типом параметра является массив строк string[]. Квадратные скобки указывают на то, что это массив. Массив – это некоторое (вообще говоря, неопределенное) количество экземпляров указанного типа. В данном случае строк. Экземпляр типа string (строка) содержит любую последовательность символов, как обычная строка текста или даже текст целой книги. Имя параметра – произвольный идентификатор, желательно «говорящий». В данном случае args означает «аргументы». Массивом аргументов метода Main являются строки, которые могут сопровождать активизацию программы (см. ниже). 2 ©Фомин Георгий Викторович Заметим, что в описании метода Main присутствует еще одно служебное слово static. Это указание на специфический характер метода Main. Смысл его будет рассмотрен позже. Такого рода служебные слова называются модификаторами. КЛАССЫ Разделение всех членов программы на методы и данные повторяет разделение памяти компьютера на области хранения кода и данных. Такое разделение сохраняется и при дальнейшем структурировании всей программы. А именно. Методы и данные, предназначенные для решения определенной задачи, объединяются в отдельный фрагмент программы под названием class. Данные, входящие в класс, называются полями. Описание класса включает в себя - служебное слово class, - имя класса (произвольный идентификатор) и - фигурные скобки {}, внутрь которых помещаются члены класса – поля и методы. Примером является описание класса Program, предлагаемое по умолчанию средой. В классе Program по умолчанию нет полей и есть только один метод Main. ОБЪЕКТЫ Классы могут иметь разные экземпляры, отличающиеся значениями данных. Такие экземпляры называют объектами. В приведенном выше примере кода есть один экземпляр str класса string и три экземпляра n, k и sum класса int. Это три объекта класса int с разными значениями своего поля. У класса int одно поле, хранящее целое число. Методы у всех экземпляров одного класса одни и те же, но результат их выполнения может зависеть от конкретного объекта. В том же примере кода при выводе на экран значений sum и n*(n+1)/2 используется (неявно, при вызове метода Console.WriteLine) метод ToString, который возвращает символьное представление числа – строку типа string. Результат работы этого метода зависит, очевидно, от самого числа типа int, то есть от конкретного объекта, но сам метод ToString одинаков для всех экземпляров типа int. ПРОСТРАНСТВО ИМЕН В языке C# весь код должен быть помещен в методы, а все методы должны быть помещены в классы. Более того, все классы должны быть помещены в пространства имен. Пространство имен это логический контейнер, который используется исключительно в целях разделения всего множества классов на отдельные группы. Так все книги в библиотеке размещаются в разных разделах – детективы, книги по физике и т.д. Описание пространства имен состоит из служебного слова namespace, имени и фигурных скобок, в которых размещены описания классов, входящих в это пространство имен. В нашем примере среда наделяет пространство имен по умолчанию именем приложения ConsoleApplication1. Полное имя метода Main в данном случае получается объединением имени пространства имен, класса и, собственно, метода ConsoleApplication1.Program.Main. Оператор . играет роль разделителя в построении полного имени члена класса. Примечания. 1. 2. Внутри любого пространства имен (назовем его OuterSpace) может быть описано новое пространство имен (назовем InnerSpace). Тогда имя внутреннего пространства имен будет выглядеть как OuterSpace. InnerSpace. Примером может служить пространства имен System.IO, где собраны классы, определяющие действия при вводе-выводе (input-output) информации. Описание пространства имен никак не связано с физическим файлом программы (кода). В одном файле может быть несколько пространств имен и одно пространство имен может занимать несколько физических файлов кода. ДЕКЛАРАЦИИ USING нужны для сокращения записи имен внутри программы. Так класс Console описан в пространстве имен System. Его полное имя System.Console. Если написать using System в начале файла, то можно писать короткое имя – Console. 3 ©Фомин Георгий Викторович