Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Некоторые методы класса ListСодержание книги
Поиск на нашем сайте
Пример использования класса List
using System; using System.Collections.Generic; class Program { static void Main() { List<int> lint = new List<int>(); lint.Add(5); lint.Add(1); lint.Add(3); lint.Sort(); int a = lint[2]; Console.WriteLine(a); foreach (int x in lint) Console.Write(x + " "); } }
Вывод: 9 1 3 5 Задание
1. Составить программу на языке C# для обработки структурированных данных с помощью классов-коллекций. В программе согласно индивидуальному заданию (табл. 14): определить базовый класс как абстрактный; ввести в абстрактный класс дополнительный абстрактные методы для изменения значений полей класса. в производных классах переопределить наследуемый метод для специализированной операции изменения полей класса (операции выбрать самостоятельно). 2. Создать класс по принципу «включение-делегирование», содержащий коллекцию производных от базового абстрактного класса объектов. Для реализации выбрать один из предложенных в табл. 14 производных классов. Описать следующие методы: добавления в коллекцию новых объектов; изменения свойств и полей имеющихся объектов по номеру объекта в коллекции; удаление из коллекции объекта по его номеру; вывода информации об имеющихся в коллекции объектах. 3. Продемонстрировать работу класса, построенного по принципу «включение-делегирование». Для этого в методе Main реализовать текстовое меню для выбора одного из возможных действий: добавить в коллекцию объект (производного класса). внести изменения в характеристики объекта коллекции. удалить объект из коллекции.
вывести сведения по имеющимся в коллекции объектам. выход из программы. 4. Разработать модульный тест для проверки работоспособности заданного метода обработки данных. Результаты тестирования сохранить в файле test.log. 5. В отчете представить: листинг программы; описание различий в работе конструкторов базового и производного классов; распечатку результатов работы метода Main по каждому пункту меню; описание тестирования и распечатки файла test.log; выводы по работе.
Таблица 15. Варианты индивидуальных заданий к лабораторной работе №10
Контрольные вопросы
1. Что такое включение, какого вида бывают включения? 2. Что такое делегирование? 3. Раскрыть механизм включения-делегирования на конкретном примере. 4. Что такое класс-коллекция?
Лабораторная работа №13
Тема: Использование интерфейсов и делегатов.
Цель: освоение составления и тестирования алгоритмов и объектно-ориентированных программ, использующих стандартные интерфейсы и делегаты.
Теоретические положения
Интерфейсы
Использование интерфейсов – удобный способ разделения функциональных возможностей. Сначала определяются интерфейсы, а затем разрабатываются классы, реализующие данные интерфейсы. Методы класса могут быть сгруппированы в разных интерфейсах.
Основной задачей интерфейса является определение контракта, не зависящего от реализации. Каждый интерфейс имеет набор методов, не реализованных непосредственно. Для каждого метода определена сигнатура, описывающая количество и тип аргументов, а также тип возвращаемого методом значения. Пример интерфейса, описывающего методы для масштабирования объекта. interface IScalable{ void ScaleX(double sx); void ScaleY(double sy);}Интерфейсы могут быть объявлены с любым из четырех модификаторов доступа, описанных ранее (при условии их вложенности в другие элементы), но все элементы интерфейсов должны быть общедоступны (по умолчанию).
Интерфейсы могут быть членами пространств имен, классов или структур, и могут содержать описания следующих элементов: - Методов - Свойств - Индексаторов - Событий Интерфейсы и наследование Вам уже известно, что в языке C# разрешено только простое наследование (наследуется только оди класс). В случае с интерфейсами разрешено и простое и множественное наследование. interface IA{ void f();}interface IB{ void g();}class C: IA, IB{ // обязательная реализация функций f и g public void f() {... } public void g() {... }}
Стандартные интерфейсы.NET
В библиотеке классов.NET определено множество стандартных интерфейсов, задающих желаемое поведение объектов. Например, интерфейс IComparable задает метод сравнения объектов на «больше-меньше», что позволяет выполнять их сортировку.
Реализация интерфейсов IEnumerable и IEnumerator дает возможность просматривать содержимое объекта с помощью foreach, а реализация интерфейса ICloneable – клонировать объекты.
Стандартные интерфейсы поддерживаются многими стандартными классами библиотеки. Например, работа с массивами с помощью foreach возможна оттого что тип Array реализует интерфейсы IEnumerable и IEnumerator.
Можно создавать и собственные классы, поддерживающие стандартные интерфейсы, что позволит использовать объекты этих классов стандартными способами.
Делегаты Делегат – это так называемый “безопасный указатель на функцию” (рис. 1). Однако, в отличие от обычных указателей на функцию в С++, делегаты C# могут вызывать более одной функции (при совместном комбинировании двух делегатов результатом будет делегат, который вызывает их обоих). Безопасность заключается в том, что делегат позволяет проверять количество передаваемых параметров, возвращаемое значение и т.д. Рисунок 1. Делегат может ссылаться на несколько методов или функций Делегат – это класс отнаследованный от базового класса System.MulticastDelegate. Делегаты являются ссылками на методы, инкапсулирующими настоящие указатели и предоставляющими удобные сервисы для работы с ними. Ссылки представляют собой объекты соответствующего типа. Делегат можно объявлять как в классе, так и просто в пространстве имен. Рассмотрим синтаксис объявления делегата: спецификатор_доступа delegate тип_возвр_значения_для_метода Имя_Делегата(список_параметров_метода)Небольшие комментарии к приведенному выше: - спецификатор_доступа - например, public и т.д.
- delegate говорит о том что, объявляется делегат - тип_возвр_значения_для_метода, список_параметров_метода - определяет, на что может указывать делегат. Например: public delegate void SetFire()Делегат может указывать как на обычный метод так и на статический. Настало волшебное время - мы применим полученную о делегатах информацию во благо обществу, т.е. Рассмотрим практический пример с использованием Делегатов: using System;using System.Collections;class Human{ // Делегат на функцию, которая ничего не возвращает и принимает объект h public delegate void HumanDelegate(Human h); // Перечисление public enum Sex{Male,Female}; private Sex p; private string name; private string surname; private int age; // конструктор public Human(){ name = surname = "Нет Данных"; age = 0; p = Sex.Male; } // конструктор с параметрами public Human(string name,string surname,int age,Sex p){ this.name = name; this.surname = surname; this.age = age; this.p = p; } // Задание имени, возврат его public string Name{ get{ return name; } set{ name = value; } } // Задание фамилии, возврат её public string Surname{ get{ return name; } set{ name = value; } } // Задание возраста, возврат его public int Age{ get{ return age; } set{ age = value; } } // Задание пола,возврат его public Sex RealSex{ get{ return p; } set{ p = value; } } }//Класс, содержащий людейclass Firm{ ArrayList people = new ArrayList(); public Firm(){ // Добавляем в список 3 - х людей people.Add(new Human()); people.Add(new Human("Вася","Иванов",80,Human.Sex.Male)); people.Add(new Human("Катерина","Маркова",25,Human.Sex.Female)); } // Метод, принимающий делегат, четко указывается название класса, //где содержится делегат, а также название делегата public void AnalyzePeople(Human.HumanDelegate ptr){ Console.WriteLine("Будем выполнять действия над человеком!!!"); // Вызываются методы, на которые указывает делегат foreach(Human obj in people) ptr(obj); }} class Sample{ // Проверка пола static void AnalyzeSex(Human h){ if(h.RealSex==Human.Sex.Male){ Console.WriteLine("Мужчина"); } else{ Console.WriteLine("Женщина"); } } // Проверка по возрасту static void AnalyzeAge(Human h){ if(h.Age>65){ Console.WriteLine("Больше 65 лет"); } else{ Console.WriteLine("Меньше или равно 65 лет"); } } static void Main() { Console.WriteLine("Пример работы Делегата"); Firm firm = new Firm(); // В этой строке происходит использование делегатов. // Создаётся объект делегата используя ключевое слово new. // Сейчас делегат указывает на метод AnalyzeSex firm.AnalyzePeople(new Human.HumanDelegate(AnalyzeSex)); // Сейчас делегат указывает на метод AnalyzeAge firm.AnalyzePeople(new Human.HumanDelegate(AnalyzeAge)); Console.Read(); }}Вывод: Пример работы ДелегатаБудем выполнять действия над человеком!!!МужчинаМужчинаЖенщинаБудем выполнять действия над человеком!!!Меньше или равно 65 летБольше 65 летМеньше или равно 65 летЗдесь делегат вложен в класс и поэтому для доступа к нему мы используем имя класса: firm.AnalyzePeople(new Human.HumanDelegate(AnalyzeAge));Как уже было сказано выше делегат это класс отнаследованный от System.MulticastDelegate. Рассмотрим 2 полезных метода этого базового класса. Первый метод Combine. Этот статический метод используется для создания делегата, указывающего на несколько разных функций (также можно пользоваться перегруженным оператором +).
Второй метод Remove. Этот статический метод удаляет делегат из списка указателей на функции. Если делегат указывает на несколько методов, то тогда при вызове делегата будут вызываться методы, на которые указывает делегат. Например (те же самые классы, но другой метод Main): static void Main(){ Console.WriteLine("Пример работы Делегата"); Firm firm = new Firm(); // Создание делегатов Human.HumanDelegate sex = new Human.HumanDelegate(AnalyzeSex); Human.HumanDelegate age = new Human.HumanDelegate(AnalyzeAge); // Многоадресный Делегат (формируем его через +) // Произойдет вызов методов AnalyzeSex и AnalyzeAge firm.AnalyzePeople(sex+age); Console.WriteLine("\n\n"); // Многоадресный Делегат (формируем его через +) // Произойдет вызов методов AnalyzeSex и AnalyzeAge firm.AnalyzePeople(age+sex); // Или так тоже Многоадресный Делегат Console.WriteLine("\n\n"); // Многоадресный Делегат (формируем его через Combine) // Произойдет вызов методов AnalyzeSex и AnalyzeAge firm.AnalyzePeople((Human.HumanDelegate)Delegate.Combine(sex,age)); // Или так тоже можно MulticastDelegate del = age+sex; firm.AnalyzePeople((Human.HumanDelegate)del); // Удаляем один делегат Delegate onlysex = MulticastDelegate.Remove(del,age); Console.WriteLine("\n\n************************************\n\n"); // Уже не многоадресный делегат firm.AnalyzePeople((Human.HumanDelegate)onlysex); Console.Read();}Здесь через делегат вызываются статические методы класса, но это можно делать и с обычными. Для этого надо несколько видоизменить создание делегата. Например: Firm firm = new Firm();// Test - это какой-то класс в нем есть методы AnalyzeSex,// AnalyzeAge Test test = new Test();//firm.AnalyzePeople(new Human.HumanDelegate(test.AnalyzeSex));firm.AnalyzePeople(new Human.HumanDelegate(test.AnalyzeAge));
Задание
1. На примере одного из классов-потомков (выбрать самостоятельно из классов, реализованных при выполнении лабораторной работы №12) реализовать интерфейсы ICloneable, IComparable и IComparer. Реализовать поверхностное и глубокое копирование объектов, вывод отсортированного списка объектов класса по произвольному полю. 2. С помощью делегатов создать метод сортировки заданным методом списка объектов класса-коллекции. Обеспечить возможность проведения сортировки объектов по полям разных типов данных. Делегат должен передавать информацию о функции сравнения двух объектов класса-коллекции. 3. Выполнить краткое описание разработанных программных средств и особенностей их выполнения.
Контрольные вопросы
1. Опишите особенности интерфейса и сравните его абстрактным классом 2. Приведите пример реализация интерфейсов 3. Приведите пример реализации доступа через интерфейсные ссылки 4. Приведите пример частичных реализаций 5. Приведите пример переменных в интерфейсах 6. Приведите пример расширения интерфейсов
Лабораторная работа №14
Тема: Двумерная графика в C#. Бинарные деревья
Цель: освоение составления программ с графическим интерфейсом Windows для работы с бинарными деревьями, применения средство пространства имен System.Drawing и его классов Graphics, Pen и Brush.
Теоретические положения
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-09-26; просмотров: 113; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.29.192 (0.012 с.) |