Некоторые методы класса List 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Некоторые методы класса List



 

Название Описание
Add Добавляет объект в конец списка
Contains Определяет, содержит ли список определенное значение
Count Возвращает количество элементов в списке
Sum Возвращает сумму элементов в списке
IndexOf Возврат индекс первого вхождения объекта в диапазон элементов списка
Insert Вставляет элемент в список по указанному индексу.
InsertRange Вставляет элементы одного списка в другой начиная с указанного индекса
Max Максимальный элемент списка (для Sytem.Int32)
Remove Удаляет первое вхождение указанного объекта из списка
RemoveAt Удаляет элемент из списка по указанному индексу
ToArray Копирует элементы списка в новый массив
Sort Сортирует элементы списка по возростанию

 

Пример использования класса 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 Книжный магазин печатное издание (издательство, число страниц) книга (авторы, ISBN), журнал (периодичность издания, ISSN) Добавление
2 Магазин товар (количество, стоимость) продуктовые товары (калорийность), бытовая химия (срок годности), одежда (размер, фасон) Изменение
3 Парк ЭВМ компьютер (тактовая частота, объем оперативной памяти) десктоп (тип корпуса) ноутбук (время работы батареи) планшет (операционная система) Удаление
4 Транспортная компания транспортное средство (год выпуска, дата последнего ремонта) автомобиль (число осей), поезд (число вагонов), судно (водоизмещение) Добавление
5 Зоопарк животное (номер, возраст, кличка) млекопитающие (наличие когтей, наличие рогов), птицы (размах крыльев, осёдлость), насекомые (наличие крыльев) Изменение
6 Порт судно (имя, водоизмещение) военный корабль (число орудий), танкер (вместимость), катер (число пассажирских мест) Удаление
7 Автопарк автомобиль (модель, год выпуска, число мест, госномер) грузовой автомобиль (грузоподъемность) рейсовый автобус (номер рейса), заказной автобус (номер заказа) Добавление
8 Студенческая группа студент (фамилия, имя, курс и ид. номер) студент-практикант (вид практики, наименование предприятия) студент-дипломник (тема ВКР, ФИО руководителя) Изменение
9 Магазин «Соки-Воды» напиток (производитель, цена) сок (ингредиенты), минеральная вода (показатель pH), газированный напиток (степень газированности) Удаление
10 Парк самолетов самолет (модель, максимальная дальность полета) военный самолет, пассажирский самолёт, спортивный самолет Добавление
11 Библиотека программ для ЭВМ компьютерная программа (название, объем кода, язык программирования) служебная программа (версия программы, дата обновления) прикладная программа (назначение, категория пользователей) Изменение
12 Кафедра в вузе преподаватель вуза (ФИО, должность, ученая степень, дата прохождения медосмотра) свободный преподаватель; преподаватель, работающий в администрации вуза (административная должность) Удаление
13 Жилой массив здание (число этажей, материал стен, адрес) жилое здание (число подъездов, число квартир на этаже) промышленное здание (число и дата заправки огнетушителей), Добавление
14 Салон мобильной связи мобильный телефон (производитель, время работы батареи) кнопочный телефон (число кнопок, наличие/отсутствие камеры) смартфон (версия ОС, дата обновления ПО) Изменение
15 Университет учащийся (ФИО, дата рождения) бакалавр (ФИО тьютора), магистрант (ФИО научного руководителя), аспирант (научная специальность) Удаление
16 Больница медицинский работник (ФИО, пол, возраст, стаж) медсестра (медицинская специализация) врач (медицинская специальность, категория, дата повышения квалификации) зав. отделением (число подчиненных) Добавление
17 Департамент работник (ФИО, общий стаж) штатный работник (дополнительные обязанности), внутр. совместитель (департамент штатной работы), внеш. совместитель (осн. место работы), руководитель (дата повышения квалификации по менеджменту) Изменение
18 Фотомагазин фотоаппарат (модель, стоимость, вес) пленочный (наличие вспышки, тип пленки) зеркальный фотоаппарат (тип резьбы объектива) Удаление
19 Энергосистема страны электростанция (дата ввода в эксплуатацию, проектная мощность) АЭС (число и тип реакторов) ГЭС (число и мощность турбин) ТЭЦ (вид топлива, КПД) Добавление
20 Химический кабинет жидкие реактивы (название, плотность, цвет, запах) кислотные (концентрация), летучие (скорость испарения) Изменение

 

 

Контрольные вопросы

 

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; просмотров: 77; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.218.230 (0.043 с.)