Опубликован: 04.07.2012 | Доступ: свободный | Студентов: 2089 / 161 | Оценка: 4.08 / 3.69 | Длительность: 21:39:00
Самостоятельная работа 6:

Разработка серверных web-приложений на С#

< Лекция 11 || Самостоятельная работа 6: 12345 || Лекция 12 >
Аннотация: Цель работы: знакомство со средой разработки приложений Microsoft Visual Studio.NET и структурой программы на языке C# (для консольного приложения); Изучение основ языка C#, особенностей работы с массивами и строками в С#. Ознакомление с реализацией интерфейсов в С#. Ознакомление с базовыми функциональными возможностями среды веб-разработки Visual Web Developer Express.

Теоретический материал

MicrosoftVisualStudio .NET - это интегрированная среда разработки для создания, документирования, запуска и отладки программ, написанных на языках .NET.

Эта среда разработки является открытой языковой средой. Наряду с языками программирования, изначально включенными в среду - C++, C#, J#, Visual Basic, - в нее могут добавляться любые языки программирования, компиляторы которых создаются сторонними разработчиками. Необходимым условием для включения языков в среду VisualStudio .NET является использование единого каркаса - платформы Framework.Net.

Платформа Framework.NET позволяет:

  1. легко использовать компоненты, разработанных на различных языках;
  2. разрабатывать единое приложение из нескольких частей на разных языках;

Для разработки приложений в Visual Studio.NET используются проекты.

Проект (Project) - это основная единица, с которой имеет дело разработчик. Сначала он должен выбрать тип проекта, после чего Visual Studio создает каркас проекта в соответствии с выбранным типом.

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

Несколько проектов могут объединяться в решение (Solution), которое также может включать ресурсы, необходимые этим проектам.

С точки зрения разработчика конечным результатом его работы, получаемым после компиляции исходного программного кода, является решение, а с точки зрения CLR (Common Language Runtime - общеязыковой среды исполнения) - сборка (assembly), содержащая PE файл, т.е. модуль в формате исполняемого файла PE (Portable Executable) для 32-разрядной ОС Windows либо DLL (Dynamic Link Library) файл.

Visual Studio.Net предлагает большое разнообразие возможных типов проектов. Для ознакомления с основами языка С# в основном будут использованы консольные приложения без привлечения привычных в Windows возможностей пользовательского интерфейса.

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

Также программа на C# может содержать комментарии и атрибуты.

В C# используются однострочные и многострочные комментарии. Однострочный комментарий начинается с пары символов "//", и весь текст до конца строки является комментарием. Многострочный комментарий начинается с пары символов /* и заканчивается */.

Атрибут - средство добавления декларативной информации к элементам программного кода. Назначение атрибутов: организация взаимодействия между программными модулями, дополнительная информация об условиях выполнения кода, управление сериализацией (т.е. правила сохранения информации), отладка, и др. Атрибуты могут быть как стандартными, так и заданными пользователем. Стандартные атрибуты используются CLR и влияют на то, как будет выполняться проект. Атрибут размещается в скобках "[]".

1. Типы данных C#.

Стандарт языка C++ включает следующий набор фундаментальных типов.

  • Логический тип (bool).
  • Символьный тип (char).
  • Целые типы. Они могут отличаться размером: short, int, long, а также могут быть знаковыми (signed) или беззнаковыми (unsigned).
  • Типы с плавающей точкой. Они также могут отличаться размерами: float, double и long double.

Тип void указывает на отсутствие информации.

К конструируемым типам относятся следующие:

  • Указатели (например, char*).
  • Ссылки (например, char&).
  • Массивы (например, char[]).

    Также язык позволяет разработчику конструировать собственные типы:

  • Перечислимые типы (enum).
  • Структуры (struct).
  • Классы.

В языке C# все типы можно рассматривать и под другим ракурсом, разделив их на четыре категории:

  • Типы-значения (value).
  • Ссылочные (reference).
  • Указатели (pointer).
  • Тип void.

Для ссылочного типа значение задает ссылку на область памяти в "куче" (heap), где расположен соответствующий объект. Для типа-значения значением являются собственно данные, а память для них выделяется в стеке.

Логический, арифметический, структуры, перечисление относятся типам-значениям. Массивы, строки и классы относятся к ссылочным типам.

И ссылочные, и обычные типы являются производными от базового класса object. В тех случаях, когда обычный тип должен вести себя как объект, создается оболочка (wrapper), которую можно рассматривать как ссылочный объект, помещенный в кучу, и в нее копируется значение переменной обычного типа. Оболочка автоматически помечается таким образом, что система знает, какое значение она содержит. Этот процесс назывется упаковкой (boxing), а обратный процесс - распаковкой (unboxing).

Упаковка происходит автоматически, для этого нужно только присвоить значение обычного типа переменной типа object. Упаковка и распаковка позволяют обрабатывать любой тип как объект. Например, в выражении

7.ToString();

целое число 7 упаковывается путем вызова функции Int32.ToString().

Массивы в C# могут быть многомерными (multidimensional) или невыровненными (jagged). Более сложные структуры данных такие, как стек и хеш-таблица определены в пространстве имен System.Collections.

2. Выражения и операторы C#.

Выражения строятся из операндов - констант, переменных, функций, - объединенных знаками операций и скобками. При вычислении выражения определяется его значение и тип.

В таблице ниже приведен список операций C#.

Категория операций Операции
Арифметические + - * / %
Логические (boolean и побитовые) & | ^ ! ~ && ||
Строковые +
Инкремент и декремент ++ --
Сдвиг >> <<
Сравнение == != < > <= >=
Присвоение = += -= *= /= %= &= |= ^= <<= >>=
Обращение к члену класса .
Индексация []
Приведение типа (Cast) ()
Условие ?:
Создание объекта new()
Информация о типе is sizeof typeof
Управление исключениями checked unchecked
Косвенности и адресации * -> [] &

Имя и тип переменной задаются при ее объявлении и остаются неизменными в течение всего времени ее жизни. Особенностью языка C# является требование обязательной инициализации переменной до начала ее использования. Попытка использовать неинициализированную переменную приводит к ошибкам, обнаруживаемым еще на этапе компиляции.

По используемым выражениям и операторам C# похож на C++. Так в программах на C# используются такие операторы как:

  • Оператор присваивания (=)
  • Составной оператор ({})
  • Операторы выбора: if-else и switch
  • Операторы цикла: for, while, оператор
  • Операторы break и continue
  • Оператор return
  • Оператор перехода goto

Кроме того, введены несколько новых инструкций. Например, оператор foreach позволяет получить доступ ко всем элементам массива или коллекции поочередно, в порядке возрастания индексов. Его синтаксис:

foreach (тип идентификатор in контейнер) оператор

В C# процедуры и функции существуют только как методы некоторого класса, они не определены вне класса. Роль библиотек процедур и функций выполняют библиотеки классов. Библиотека классов Framework Class Library (FCL), доступная в языке C#, существенно расширяет возможности языка.

3. Классы и методы в C#.

В Visual Studio.Net, и в C# в частности, любая программная система рассматривается как совокупность классов, объединенных в проекты, пространства имен, решения.

Описание класса имеет следующий синтаксис:

[атрибуты][модификаторы]class имя_класса[:список_родителей] {тело_класса}

В теле класса могут быть объявлены:

  • константы;
  • поля;
  • конструкторы и деструкторы;
  • методы;
  • события;
  • делегаты;
  • классы (структуры, интерфейсы, перечисления).

Поля класса синтаксически являются обычными переменными (объектами) языка. Их описание удовлетворяет обычным правилам объявления переменных. Поля характеризуют свойства объектов класса.

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

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

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

[<спецификатор доступа>] delegate <тип результата> <имя класса> (<список аргументов>);

4. Массивы

Язык C# предоставляет средства для работы с одномерными массивами, массивами массивов и многомерными массивами.

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

// Объявление массива размерности 3 из элементов типа int.
// Фактически это массив составляющих, представляющих собой массивы 
// размерности 2 одномерных массивов элементов типа int.
// Размеры всех составляющих массивов одного уровня равны
// между собой ("прямоугольный" массив).

int[,,] ar1; 

// Объявление одномерного массива из 
// одномерных массивов элементов, каждый из которых является 
// одномерным массивом элементов типа int.

int[][][] ar2;

// Объявление одномерного массива составляющих, каждый из которых является 
// двумерным массивом массивов элементов типа int.
// При этом у всех составляющих могут быть разные размеры

int[][,] ar3;

// Объявление двумерного массива составляющих, каждая из которых является 
// одномерным массивом элементов типа int.
// При этом у всех составляющих могут быть разные размеры.

int[,][] ar4;

Рассмотренные примеры демонстрируют определение двух различных категории массивов:

  • прямоугольные массивы,
  • ломаные (jagged) массивы.

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

Возможны два варианта объявления массива совмещенного с инициализацией.

В первом случае инициализация является явной и задается списком констант, например:

int[] odd = {1, 3, 5, 7, 9};

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

int[] even = new int[5];

Все массивы являются потомками класса System.Array, который в свою очередь наследует ряд интерфейсов: ICloneable, IList, ICollection, IEnumerable, а, следовательно, реализует все их методы и свойства. Кроме того, класс Array имеет большое число собственных методов и свойств.

Благодаря наследованию от класса System.Array, для массивов определены такие встроенные методы копирования, поиска, обращения, сортировки. Массивы можно рассматривать также как как коллекции и использовать цикл foreach для перебора его элементов.

Ниже приведены основные свойства и методы класса System.Array:

Свойство Описание
IsFixedSize Возвращает true, если массив является статическим
IsReadOnly Для всех массивов возвращает значение false
IsSynchronized Возвращает true или false, в зависимости от того, установлена ли синхронизация доступа для массива
Length Число элементов в массиве
Rank Размерность массива
Метод Описание
BinarySearch Бинарный поиск элементов
Clear Выполняет инициализацию элементов. Числовые элементы становятся нулевыми, а строковые принимают значение Null
Clone Клонирование массива
Copy Копирование части или всего массива в другой массив
CopyTo Копируются все элементы одномерного массива в другой одномерный массив, начиная с заданного индекса
CreateInstance Создание экземпляра массива
GetEnumerator Возварщает интерфейс IEnumerator. Необходим для использования в цикле foreach
GetLength Возвращает число элементов массива по указанному измерению
GetLowerBound, GetUpperBound Возвращает нижнюю и верхнюю границу по указанному измерению. Для массивов нижняя граница всегда равна нулю.
GetValue SetValue Возвращает или устанавливает значение элемента массива с указанными индексами.
IndexOf Индекс первого вхождения образца в массив
LastIndexOf Индекс последнего вхождения образца в массив
Reverse Сортировка одномерного массива в обратном порядке
Sort Сортировка массива
< Лекция 11 || Самостоятельная работа 6: 12345 || Лекция 12 >
Галина Башкирова
Галина Башкирова

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

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам

 

Константин Моренко
Константин Моренко