
- •Теоретические сведения: Проблемы разработки современных ис
- •Решение проблем разработки информационных систем в .Net
- •Общеязыковая исполняющая среда (Common Language Runtime)
- •Утилиты .Net Framework
- •Основные утилиты .Net Framework
- •Утилиты .Net Framework для отладки приложений
- •Утилиты .Net Framework по работе с защитой приложений
- •Утилиты .Net Framework для настройки и установки приложений
- •Сборки в среде clr
- •1 Общие сведения о сборках
- •2 Содержимое сборок
- •3 Манифест сборки
- •4 Размещение сборок
- •Visual Studio .Net – открытая среда разработки.
- •Среда Microsoft Visual c# 2005 Express Edition
- •Структура программы в c#.
- •Пример 1. Программа FirstProject
- •Пространство имен.
- •Создание и запуск проекта.
- •Практична робота № 2 Введення в Windows Forms
- •Ход работы (первой части лабораторного занятия).
- •Теоретические сведения:
- •Создание Windows-приложений
- •Окно кода программы
- •Роль класса Application
- •Свойства проекта
- •Запуск приложения
- •Что такое форма
- •Windows Forms в технологии .Net
- •Функциональные возможности класса Form
- •Цикл существования объекта Form
- •Диалог MessageBox
- •Закрытие формы (Выход из формы)
- •Создание mdi-приложений.
- •Стандартный делегат
- •1 Часть
- •2 Часть
- •Теоретические сведения.
- •Форматирование строки вывода.
- •Консольный ввод.
- •Расширяющее преобразование.
- •Сужающее преобразование
- •Метод Parse().
- •Класс System.Environment. Окружение.
- •Система типов
- •Простые (элементарные) типы
- •Перечисления
- •Структуры
- •Язык xml
- •Практична робота № 4 Огляд мови с #. Змінні. Структури мови Цель: освоить синтаксис языка программирования с#, закрепить практически использование структур языка. Ход выполнения работы:
- •Теоретические сведения. Базовый синтаксис с#
- •Литералы. Представление значений.
- •Арифметические литералы
- •Логические литералы
- •Символьные литералы
- •Символьные управляющие последовательности.
- •Строковые литералы
- •Переменные.
- •Объявление и инициализация.
- •Область видимости.
- •Константы
- •Операции и выражения
- •Контроль за переполнением. Checked и unchecked.
- •Операция is
- •Операция as
- •Особенности выполнения арифметических операций
- •Особенности арифметики с плавающей точкой
- •Управляющие операторы
- •Теоретические сведения: Иерархия классов. Понятие класса управляющих элементов.
- •Класс Control
- •Элемент управления TextBox
- •Класс Button
- •Элемент управления CheckBox
- •Переключатели и группирующие рамки
- •Элемент управления CheckedListBox
- •Комбинированные списки
- •Управляющий элемент ImageList
- •Элемент управления MonthCalendar
- •Элемент управления Panel
- •Порядок перехода по Tab
- •Форматирование элементов управления
- •Свойства Anchor и Dock
- •Всплывающие подсказки (ToolTips)
- •Создание меню
- •Главное меню.
- •Контекстное меню
- •Создание строки состояния
- •Создание пользовательского диалогового окна.
- •Стандартные диалоговые панели общего назначения.
- •II Задание Expression в таблице, используя визуальные средства разработки.
- •Теоретические сведения:
- •1 Класс DataSet.
- •1.1 Класс DataTable (таблицы)
- •1.1.1 Столбцы (объект Columns).
- •1.1.2 Строки (объект Row)
- •Добавление данных.
- •Заполнение полей.
- •Изменение данных.
- •Состояния строки.
- •Обработка событий
- •Привязка DataTable к некоторым элементам управления.
- •1.1.3 Ограничения (объект Constraints)
- •1.1.4 Представление (объект DataView).
- •1.2 Класс DataRelation (связи между таблицами)
- •2 Просмотр данных. Класс DataGridView.
- •Источники данных (DataSource).
- •2.1.1 Отображение данных из массива
- •2.1.2 Отображение данных из DataTable
- •2.1.3 Отображение данных из DataView
- •2.1.4 Отображение данных из класса DataSet
- •2.1.5 Отображение данных из массива
- •2.2 Привязка данных (DataBinding).
- •Простая привязка.
- •Объекты привязывающие данные (BindingContext)
- •3 Схемы xml.
- •3.1 Пример использования xml-формата для взаимодействия с xml Web-службами:
- •3.2 Ado.Net 2.0 тесно интегрировано с xml.
- •4 Xsd (xml Structure Defenitions) схема.
- •4.1 Описание.
- •4.2 Основные элементы
- •4.3 Использование Visual Studio 2005 .Net
- •4.3.1. Загрузка схем и данных в DataSet
- •4.3.2 Запись схемы и данных из DataSet
- •Практична робота № 7 Використання масивів і їх методів в c # Цель: овладеть возможностью использования массивов, строк и их методов.
- •Массив.
- •Объявление массивов Объявление одномерных массивов
- •Многомерные массивы
- •Пример использования массивов.
- •Массивы массивов
- •Встроенный сервис по обслуживанию массивов
- •Практична робота № 8 Використання колекцій в c # Цель: овладеть возможностью использования коллекций.
- •Коллекции.
- •ArrayList. Массив-список.
- •Практична робота № 9 Об'єкти і класи в с # Цель: четко разграничить понятия класса, объекта.
- •Поля класса
- •Методы класса
- •Объект.
- •Конструктор.
- •Деструктор.
- •Операция new
- •Вложенные классы.
- •Ссылки как параметры.
- •Оператор is
- •Оператор as
- •Переменные только для чтения и константы.
- •Ключевое слово static.
- •Практична робота № 10 Успадкування. Інкапсуляція. Поліморфізм Цель: практически освоить основные принципы ооп. Ход работи:
- •1 Часть. Изучение принципов наследования и инкапсуляции.
- •2 Часть. Изучение принципа полиморфизма.
- •Теоретические сведения.
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Виртуальные методы и работа с ними в производных класах.
- •Интерфейсы.
- •Практична робота № 11 Робота з файлами в с # Цель: овладеть возможностью считывания/записи данных из/в файл.
- •Потоки: байтовые, символьные, двоичные
- •Общая характеристика классов потоков
- •Класс Filestream
- •Открытие и закрытие файла.
- •Копирование файла.
- •Файловый ввод–вывод с ориентацией на символы.
- •Пример использования StreamWriter.
- •Пример использования StreamReader.
- •Пример перенаправления потоков.
- •Основні поняття, що використовуються при проектуванні діалогу.
- •Основна термінологія, що використовується при проектуванні вікон. Визначення вікон, типи вікон.
- •Спосіб проектування інтерфейсу користувача з орієнтацією на дані.
- •Спосіб проектування інтерфейсу користувача з орієнтацією на документи.
- •Вибір моделі інтерфейсу.
- •Розробка вікна.
- •Теоретичні відомості.
- •Поле вибору: визначення, стан, типи.
- •Поле вибору: представлення об’єктів, ідентифікація поля.
- •Поле вибору: курсор вибору, виділення обраного об’єкту, недоступність об’єкту вибору, черговість розташування, елементи настроювання.
- •Взаємодія користувача з полями вибору, первісні представлення, вхідний стан.
- •Поле введення: визначення, ідентифікація, роздільники, шрифт, правила читабельності.
- •Теоретичні відомості. Меню дій, спадаюче меню: призначення, розташування, обов’язкові опції, число опцій.
- •Послідовність опцій курсору.
- •Елементи настроювання і виклик опцій.
- •Особливості режимів роботи для одного користувача і багатьох користувачів.
- •Спливаюче меню.
- •Область функціональних клавіш.
- •Теоретичні відомості.
- •Область команд: розміщення, зміст, використання, правила запиту дії “Команда”.
- •Правила для дій “Витяг команди”, правила для дії “Підказка”.
- •Співвідношення між областю команд і меню дій.
- •Практична робота № 16 Створення графічних додатків в с #
- •Практична робота № 17 Створення графічних примітивів
Интерфейсы.
Если класс должен служить лишь для описания набора методов, которые должен поддерживать любой производный от него класс, для этой цели используются так называемые интерфейсы (пример UsingInheritance).
Объявление интерфейса подобно классу, за исключением того, что вместо ключевого слова class используется interface.
Можно выделить три основные особенности интерфейса:
1) при объявлении интерфейса все его методы неявно имеют модификатор public, и явное указание модификатора доступа приведет к ошибке.
2) методы не содержат тела с реализацией. После объявления метода следует точка с запятой.
3) интерфейс не может содержать данных, в нем могут быть объявлены только методы, события, свойства и индексаторы, которые объявляются, но не имеют реализации.
Создадим интерфейс ITest, который будет хранить метод создания теста:
interface ITest
{
void MakeTest();
}
Два класса будут наследовать этот интерфейс, и хранить собственную реализацию. Отметим, что для наглядности в одном из классов при реализации метода будет стоять спецификатор virtual:
class Tester1 : ITest
{
public void MakeTest()
{
Console.WriteLine("MakeTest1");
}
}
class Tester2 : ITest
{
public virtual void MakeTest()
{
Console.WriteLine("MakeTest2");
}
}
В основной программе допишем объявление экземпляров этих классов и вызов методов для них:
static void Main(string[] args)
{
ITest a = new Tester1();
ITest b = new Tester2();
a.MakeTest();
b.MakeTest();
}
В результате выполнения данного кода получим окно:
Выводы:
автоматически поддерживается полиморфизм (каждый класс-предок реализует метод интерфейса своим способом). Однако, если планируется класс, реализующий интерфейс, делать базовым и поддерживающим полиморфизм, необходимо явно указать спецификатор virtual:
// создаем наследника для реализации метода без спецификатора virtual
class MyTest1 : Tester1
{
public void MakeTest()
{
Console.WriteLine("MyTest1");
}
}
// создаем наследника для реализации метода c virtual
class MyTest2 : Tester2
{
public void MakeTest()
{
Console.WriteLine("MyTest2");
}
}
. . .
static void Main(string[] args)
{
// вызываем методы наследников
Tester1 t1 = new MyTest1();
Tester2 t2 = new MyTest2();
t1.MakeTest();
t2.MakeTest();
}
В результате выполнения данного кода получим окно:
При этом в самой среде в окне Error List появится предупреждение, что для первого класса нарушен полиморфизм.
несмотря на то, что модификатор доступа у всех интерфейсных методов public, все равно явно необходимо указывать этот модификатор в классе, если необходимо сделать реализацию метода открытым. В противном случае методы будут иметь модификатор private по умолчанию:
interface ITest
{
void MakeTest();
}
class Tester1 : ITest
{
void MakeTest()
{
Console.WriteLine("MakeTest1");
}
}
. . .
static void Main(string[] args)
{
Tester1 a = new Tester1();
a.MakeTest(); //ошибка, метод недоступен
}
Для наглядности сведем результаты UsingInheritance в таблицу:
|
Полиморфизм не поддерживается |
Полиморфизм поддерживается |
интерфейс |
interface ITest { void MakeTest(); } |
|
базовый класс |
class Tester1 : ITest { public void MakeTest() { Console.WriteLine("MakeTest1"); } } |
class Tester2 : ITest { public virtual void MakeTest() { Console.WriteLine("MakeTest2"); } } |
вызов в Main() |
ITest a = new Tester1(); a.MakeTest(); |
ITest b = new Tester2(); b.MakeTest(); |
класс-наследник |
class MyTest1 : Tester1 { public void MakeTest() { Console.WriteLine("MyTest1"); } } |
class MyTest2 : Tester2 { public override void MakeTest() { Console.WriteLine("MyTest2"); } } |
вызов в Main() |
Tester1 t1 = new MyTest1(); t1.MakeTest(); |
Tester2 t2 = new MyTest2(); t2.MakeTest(); |
результат |
|
|
Напомним, что C# позволяет наследовать класс только от одного класса. Но класс может реализовывать несколько интерфейсов (в таком случае они перечисляются через запятую при объявлении класса). Вышесказанное демонстрирует пример IStudent.
При реализации методов явным образом есть некоторые ограничения:
при доступе к методу необходимо явно приводить ссылку к типу интерфейса, метод которого мы вызываем, или вызывать через ссылку на этот интерфейс,
нельзя указать для реализуемого метода модификатор доступа,
нельзя объявить метод как виртуальный.
Для наглядности сведем результаты IStudent в таблицу:
|
Полиморфизм не поддерживается |
Полиморфизм поддерживается |
||
|
//опишем интерфейс программиста interface IProgrammer { //умеет программировать void Programming(); //является ли это хобби void Hobby(); } |
//опишем интерфейс музыканта interface IMusician { //умеет настраивать инструмент void Tune(); //является ли это хобби void Hobby();
} |
||
базовый класс |
//создадим класс Человек class Human { //конструктор класса public Human() { Console.WriteLine("I am Human"); } } |
|||
класс-наследник |
//создадим класс-предок Студент, который наследуется от Человека //и реализует интерфейсы программиста и музыканта class Student: Human, IMusician, IProgrammer { public void Programming() { Console.WriteLine("I am Programmer"); }
public void Tune() { Console.WriteLine("I am Guitarist"); }
//реализация методов интерфейсов с одинаковыми именами
} |
|||
вызов в Main() |
Student st = new Student(); st.Programming(); st.Tune(); |
|||
явное преобразование при вызове метода |
((IProgrammer)st).Hobby(); |
((IMusician)st).Hobby(); |
||
результат |
|