Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Пример 1.

Инкапсуляция с использованием традиционных методов доступа и изменения | Инкапсуляция с использованием свойств .NET | Свойства, доступные только для чтения и только для записи | Статические свойства | Статические конструкторы | SetFullName (fullName); | Ключевое слово sealed | Ключевые слова virtual и override | Абстрактные классы | Полиморфный интерфейс |


Читайте также:
  1. Fill in the missing numerals in the following sentences as in the example given for the first sentence. (Вставьте пропущенное имя числительное как в примере.)
  2. Gt; Часть ежегодно потребляемого основного напитала не должна ежегодно воз­мещаться в натуре. Например, Vu стойкости машины в течение года перенесена на
  3. IV. УЧЕБНО-МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ПРИМЕРНОЙ ПРОГРАММЫ
  4. IX. МЕТОДИЧЕСКИЕ УКАЗАНИЯ К СЕМИНАРСКИМ ЗАНЯТИЯМ. ПРИМЕР.
  5. VII. Примерный перечень тем рефератов и курсовых работ
  6. Актуальный пример разработки программы в случае моббинга
  7. Анализ логопедического занятия (примерная схема протокола)

Содержание

1. Разбор простой программы на С#. 3

1.1 Варианты метода Main () 4

2. Формальное определение класса в С# 6

2.1 Ссылки на самого себя 7

2.2 Построение цепочки вызовов конструкторов с использованием this. 7

3. Модификаторы доступа С# 8

4. Средства инкапсуляции С# 9

4.1 Инкапсуляция с использованием традиционных методов доступа и изменения 9

4.2 Инкапсуляция с использованием свойств.NET 10

4.3 Свойства, доступные только для чтения и только для записи 11

4.4 Статические свойства 11

4.5 Статические конструкторы 11

5 Наследование в С# 12

5.1 Работа с конструктором базового класса 13

5.2 Множественное наследование. 14

5.3 Ключевое слово sealed 14

6 Поддержка полиморфизма в С# 15

6.1 Ключевые слова virtual и override 15

6.2 Абстрактные классы 17

6.3 Полиморфный интерфейс 18

6.4 Сокрытие методов 21

7 Правила приведения к базовому и производному классу 23

7.1 Ключевое слово as 24

7.2 Ключевое слово is 25

8 Применение модели включения – делегирования. 25

8.1 Определение вложенных типов 28

9 Обработка исключений 28

9.1 Роль обработки исключений в.NET 29

9.2 Составляющие процесса обработки исключений в.NET 31

9.3 Генерация общего исключения 31

9.4 Перехват исключений 32

9.5 Создание специальных исключений, способ первый 34

9.6 Обработка нескольких исключений. 35

9.7 Блок finally 36

9.8 Замечания по работе с исключениями 37

10 Время жизни объектов 38

10.1 Базовые сведения о времени жизни объектов 38

10.2 CIL-код, генерируемый для ключевого слова new 39

10.3 Роль корневых элементов приложения 40

10.4 Поколения объектов 41

10.5 Параллельная сборка мусора в версиях.NET 1.0 -.NET 3.5 42

10.6 Фоновая сборка мусора в версии.NET 4.0 43

10.7 Создание финализируемых объектов 43

10.8 Описание процесса финализации 44

10.9 Создание высвобождаемых объектов 45

10.10 Повторное использование ключевого слова using в С# 47

10.11 Взаимодействие со сборщиком мусора 48

10.12 Принудительная активизация сборки мусора 49

10.13 Создание финализируемых и высвобождаемых типов 52

10.14 Формализованный шаблон очистки 53


1. Разбор простой программы на С#.

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

Для начала создадим новый проект типа Console Application (Консольное приложение) по имени SimpleCSharpAppB.

Как показано ниже, в исходном коде Program.cs ничего особо примечательного нет:

Имея такой код, далее модифицируем метод Main() в классе Program, добавив в него следующие операторы:

В результате получилось определение типа класса, поддерживающее единственный метод по имени Main(). По умолчанию классу, в котором определяется метод Main(), в Visual Studio 2010 назначается имя Program; при желании это имя легко изменить. Класс, определяющий метод Main(), должен обязательно присутствовать в каждом исполняемом приложении на С# (будь то консольная программа, настольная программа для Windows или служба Windows), поскольку он применяется для обозначения точки входа в приложение.

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

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

 

На заметку! С# является чувствительным к регистру языком программирования. Следовательно, Main и main или Readline и ReadLine будут представлять собой не одно и то же. Поэтому необходимо запомнить, что все ключевые слова в С# вводятся в нижнем регистре (например: public, lock, class, dynamic), а названия пространств имен, типов и членов всегда начинаются (по соглашению) с заглавной буквы, равно как и любые вложенные в них слова (как, например, Console.WriteLine, System.Windows.Forms.MessageBox и System.Data.SqlClient ). Как правило, при каждом получении от компилятора ошибки, связанной с "неопределенными символами", требуется проверить регистр символов.

 

Помимо ключевого слова static, данный метод Main() имеет еще один параметр, который представляет собой массив строк (string[] args). Хотя в текущий момент этот массив никак не обрабатывается, в данном параметре в принципе может содержаться любое количество аргументов командной строки (процесс получения доступа к которым будет описан чуть ниже). И, наконец, данный метод Main() был сконфигурирован с возвращаемым значением void, которое свидетельствует о том, что решено не определять возвращаемое значение явным образом с помощью ключевого слова return перед выходом из области действия данного метода.

Логика Program содержится внутри самого метода Main(). Здесь используется класс Console из пространства имен System. В число его членов входит статический метод WriteLine(), который позволяет отправлять строку текста и символ возврата каретки на стандартное устройство вывода. Кроме того, здесь вызывается метод Console.ReadLine(), чтобы окно командной строки, запускаемое в IDE-среде Visual Studio 2010, оставалось видимым во время сеанса отладки до тех пор, пока не будет нажата клавиша < Enter >.

Варианты метода Main ()

По умолчанию в Visual Studio 2010 будет генерироваться метод Main() с возвращаемым значением void и массивом типов string в качестве единственного входного параметра. Однако такой метод Main() является далеко не единственно возможным вариантом. Вполне допускается создавать собственные варианты входной точки в приложение с помощью любой из приведенных ниже сигнатур (главное, чтобы они содержались внутри определения какого-то класса или структуры на С#):

 

Очевидно, что выбор способа создания метода Main() зависит от двух моментов. Во-первых, он зависит от того, нужно ли, чтобы системе после окончания выполнения метода Main() и завершения работы программы возвращалось какое-то значение; в этом случае необходимо возвращать тип данных int, а не void. Во-вторых, он зависит от необходимости обработки предоставляемых пользователем параметров командной строки; в этом случае они должны сохраняться в массиве strings.

 


2. Формальное определение класса в С#

Формально класс — это определяемый пользователем тип, который состоит из данных полей (часто именуемых переменными-членами) и членов, оперирующих этими данными (конструкторов, свойств, методов, событий и т.п.).

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

Пример 1.

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

Для начала создадим новое консольное приложение С# по имени EmployeeExample.

В С# поддерживается механизм конструкторов, которые позволяют устанавливать состояние объекта в момент его создания. Конструктор (constructor) — это специальный метод класса, который вызывается неявно при создании объекта с использованием ключевого слова new. Однако в отличие от "нормального" метода, конструктор никогда не имеет возвращаемого значения (даже void) и всегда именуется идентично имени класса, который он конструирует.

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

Если вы не удовлетворены такими присваиваниями по умолчанию, можете переопределить конструктор по умолчанию в соответствии со своими нуждами. Определим класс для сотрудника, как показано ниже:

(этот код вставляем в проект EmployeeExample, создаем пространство имен Employees)


(этот код вставляем в проект)

Задание!!!: протестировать, исправить возможные ошибки

 

В данном примере определение конструктора по умолчанию не содержит каких-либо действий, которые должен выполнять конструктор:

public Employee() { }

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

Использование созданного пользовательского конструктора очевидно:

(этот код вставляем в проект EmployeeExample)

Задание!!!: протестировать, исправить возможные ошибки

 


Дата добавления: 2015-07-25; просмотров: 160 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Глава 33| Построение цепочки вызовов конструкторов с использованием this.

mybiblioteka.su - 2015-2024 год. (0.009 сек.)