Интернет Университет информационных технологий Твой путь к знаниям
  Искать!
Курсы | Обучение | Школа | Магазин | Общение | Новости | Помощь

поддержка курса Введение в программирование на C# 2.0
информация [+] Автор: А.Л. Марченко | ISBN: 978-5-9556-0086-4


 
 
1. Лекция: Программа. Сборка. Класс
вопросы | » для печати и PDA
Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter
В данной лекции рассматриваются основные понятия языка, а также принципы работы Microsoft .NET

Программа – правильно построенная (не вызывающая возражений со стороны C#-компилятора) последовательность предложений, на основе которой формируется сборка.

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

  • Portable Executable File (PE-файл с расширением .exe), пригоден к непосредственному исполнению CLR.
  • Dynamic Link Library File (DLL-файл с расширением .dll), предназначен для повторного использования как компонент в составе какого-либо приложения.

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

Пространство имен

.NET Framework располагает большим набором полезных функций. Каждая из них является членом какого-либо класса. Классы группируются по пространствам имен. Это означает, что в общем случае имя класса может иметь сложную структуру — состоять из последовательности имен, разделенных между собой точками. Последнее имя в этой последовательности собственно и является именем класса. Классы, имена которых различаются лишь последними членами (собственно именами классов) последовательностей, считаются принадлежащими одному пространству имен.

Средством "навигации" по пространствам имен, а точнее, средством, которое позволяет сокращать имена классов, является оператор

using <ИмяПространстваИмен>;

В приложении может объявляться собственное пространство имен, а также могут использоваться ранее объявленные пространства.

В процессе построения сборки транслятор должен знать расположение сборок с заявленными для использования пространствами имен. Расположение части сборок известно изначально. Расположение всех остальных требуемых сборок указывается явно (непосредственно в Visual Studio при работе над проектом открыть окно Solution Explorer, выбрать пункт References, далее Add Reference... – там надо задать или выбрать соответствующий .DLL- или .EXE-файл).

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

Наиболее часто используемое пространство имен – System. Расположение соответствующей сборки известно. Если не использовать оператор

using System;

корректное обращение к функции WriteLine(...) – члену класса Console выглядело бы следующим образом:

System.Console.WriteLine("Ha-Ha-Ha!"); // Полное квалифицированное
//имя функции – члена класса Console, отвечающей за вывод строки в окно приложения.

При компиляции модуля транслятор по полному имени функции (если используется оператор using – то по восстановленному на его основе) находит ее код, который и используется при выполнении сборки.

Класс и Структура. Первое приближение

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

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

С точки зрения синтаксиса, между объявлениями классов и структур существуют незначительные различия (ключевые слова struct и class, в структуре не допускается объявлений членов класса со спецификаторами доступа protected и protected internal, при объявлении структуры не допускается объявление конструктора без параметров), часть из которых будет рассмотрены далее.

Основное их различие состоит в том, что класс и структура принадлежат к двум различным категориям типов – типов-ссылок и типов-значений.

В этом разделе обсуждаются основные правила объявления классов.

Объявление класса состоит из нескольких элементов:

  • Объявление атрибутов – необязательный элемент объявления.
  • Модификаторы (в том числе модификаторы прав доступа) – необязательный элемент объявления.
  • Partial (спецификатор разделения объявления класса) – необязательный элемент объявления.
  • Class (struct для структуры).
  • Имя класса.
  • Имена предков (класса и интерфейсов) – необязательный элемент объявления.
  • Тело класса (структуры).

Атрибуты – средство добавления ДЕКЛАРАТИВНОЙ (вспомогательной) информации к элементам программного кода. Назначение атрибутов: организация взаимодействия между программными модулями, дополнительная информация об условиях выполнения кода, управление сериализацией (правила сохранения информации), отладка и многое другое.

Модификаторы new, abstract, sealed, static обсуждаются дальше. Модификаторы прав доступа обеспечивают реализацию принципа инкапсуляции, используются при объявлении классов, структур и их составляющих компонентов. Представлены следующими значениями:

publicОбозначение для общедоступных членов класса. К ним можно обратиться из любого метода любого класса программы
protectedОбозначение для членов класса, доступных в рамках объявляемого класса и из методов производных классов
internalОбозначение для членов класса, которые доступны из методов классов, объявляемых в рамках сборки, где содержится объявление данного класса
protected internalОбозначение для членов класса, доступных в рамках объявляемого класса, из методов производных классов, а также доступных из методов классов, которые объявлены в рамках сборки, содержащей объявление данного класса
privateОбозначение для членов класса, доступных в рамках объявляемого класса

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

Сочетание ключевого слова class ( struct, interface ) и имени объявляемого класса (структуры или интерфейса) задает имя типа.

Конструкции

:имя класса
(при объявлении класса)
:список имен интерфейсов
(при объявлении структуры или класса)
:имя класса, список имен интерфейсов
(при объявлении класса)

с обязательным разделителем ' :' обеспечивают реализацию принципа наследования и будут обсуждаться позже.

Тело класса в объявлении ограничивается парой разделителей ' { ', ' } ', между которыми располагаются объявления данных — членов и методов класса.

Следующий пример демонстрирует использование основных элементов объявления структуры. При объявлении структуры допускается лишь один явный спецификатор – public (здесь он опущен). Отсутствие спецификаторов доступа в объявлениях членов структуры (класса) эквивалентно явному указанию спецификаторов private.

// Указание на используемые пространства имен.
using System;
using System.Drawing;

namespace qwe // Объявление собственного пространства имен. Начало.
{
// Начало объявления структуры
struct S1
{// Тело структуры – НАЧАЛО
// Объявление данных-членов.   
private Point p;
// protected int qwe; // Спецификатор protected в объявлении членов
// структуры недопустим. Структура не имеет развитого механизма 
//наследования. 
// Структура не может иметь конструктора без параметров.
public S1(int x, int y)
{
p = new Point(10,10);		
}

// Объявление методов.
// Статический метод. Точка входа. 
static void Main(string[] args)
{
    // Тело метода. Здесь обычно располагается программный код,
    // определяющий функциональность класса.
}
}// Тело структуры – КОНЕЦ
} // Объявление собственного пространства имен. Конец.
Перейти к вопросам »
вопросы | » для печати и PDA
 
 

Внимание! Если Вы увидите ошибку на нашем сайте, выделите её и нажмите Ctrl+Enter.
Нужна помощь?
• Забыли пароль? Вам сюда...
• Есть вопрос? Спрашивайте!
Вы можете:
• Изменить персональные данные
• Изменить параметры подписки
Интернет-магазин:
• Ваши заказы здесь
• Ваш личный счет
Курсы | Учебные программы | Учебники | Вопросы и Ответы | Форум | Новости | Помощь

Телефон: +7 (499) 253-9312, 253-9313, факс: +7 (499) 253-9310, email: info@intuit.ru
© INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование, 2003-2011
Проект Издательства "Открытые Системы".
Партнеры: РМ Телеком, KRAFTWAY COMPUTERS.
Rambler's Top100