10. Интерфейсы: стандартные интерфейсы.
10. Интерфейсы: стандартные интерфейсы. В библиотеке классов. Net определено множество стандартных интерфейсов, задающих желаемую функциональность объектов. Например, интерфейс IComparable задает метод сравнения объектов по принципу больше и меньше, что позволяет переопределить соответствующие операции в рамках класса, наследующего интерфейс IComparable. Реализация интерфейсов IEnumerable и IEnumerator дает возможность просматривать содержимое объекта с помощью оператора foreach. Можно создавать собственные классы, реализующие стандартные интерфейсы, что позволит использовать объекты этих классов стандартными способами. Интерфейс IComparable определен в пространстве имен System и содержит единственный метод CompareTo, возвращающий результат сравнения двух объектов - текущего и переданного ему в качестве параметра: interface IComparable { int CompareTo(object obj); } Реализация данного метода должна возвращать: 1. 0 - если текущий объект и параметр равны; 2. отрицательное число, если текущий объект меньше параметра; 3. положительное число, если текущий объект больше параметра. // класс DemoPoint реализует стандартный интерфейс IComparable class DemoPoint: IComparable { protected int x; protected int y; public DemoPoint ( int x, int y) { this. x=x; this. y=y; } public void Show() { Console. WriteLine(" точка на плоскости: ({0}, {1})", x, y); } public double Dlina() { return Math. Sqrt(x*x+y*y); } //реализация метода CompareTo public int CompareTo (object obj) { DemoPoint b=(DemoPoint) obj; //преобразуем к типу DemoPoint //определяем критерии сравнения текущего объекта с параметром в зависимости от удаленности точки от начала координат if (this. Dlina()==b. Dlina()) return 0; else if (this. Dlina()> b. Dlina()) return 1; else return -1; }}
11. Структуры, как значимый тип данных. В С# реализован тип данных, аналогичный классу, но который в отличие от классов является размерным типом. Таким типом является структура.
Так как структура является размерным типом, то экземпляр структуры хранит значение своих элементов, а не ссылки на них, и располагается в стеке данных, а не в куче. В связи с этим фактом структура не может участвовать в иерархии наследования, а может только реализовывать интерфейсы. Кроме того, структуре запрещено: 1. определять конструктор по умолчанию, поскольку он определен неявно и присваивает всем своим элементам значения по умолчанию; 2. определять деструктор, поскольку это бессмысленно. Синтаксис структуры: [атрибуты][спецификаторы] struct имя_структуры [: интерфейсы] { тело_структуры} Спецификаторы структуры имеют такой же смысл, как и для класса. Однако из спецификаторов доступа допускается использовать только public, internal и для вложенных структур еще и private. Кроме того, структуры не могут быть абстрактными, поскольку по умолчанию они бесплодны. Интерфейсы, реализуемые структурой, перечисляются через запятую. Тело структуры может содержать: константы, поля, конструкторы, методы, свойства, индексаторы, операторные методы, вложенные типы и события. Так как структуры не могут участвовать в иерархии, то для ее членов недопустимо использовать спецификаторы protected и protected internal. Методы структур не могут быть абстрактными и виртуальными. А переопределяться могут только те методы, которые унаследованы от базового класса object. //описание структуры struct SPoint: IComparable { public int x, y; public SPoint (int x, int y) { this. x=a; this. y=y; } public double Dlina() //метод { return Math. Sqrt(x*x+y*y); } public override string ToString() { return " (" +x. ToString()+", " +y. ToString()+" )"; } public int CompareTo (object obj) { SPoint b=(SPoint) obj; if (this. Dlina()==b. Dlina()) return 0; else if (this. Dlina()> b. Dlina()) return 1; else return -1; }} Так как структуры являются размерными типами, то присваивание одной структуры другой создает копию экземпляра структуры. Этот факт является важным отличием структуры от класса.
SPoint one=new SPoint(); //вызов конструктора по умолчанию SPoint two=new SPoint(1, 1); //вызов собственного конструктора 12. Коллекции: классификация коллекций. В С# под коллекцией понимается некоторая группа объектов. Коллекции упрощают реализацию многих задач программирования, предлагая уже готовые решения для построения структур данных. Среда. NET Framework поддерживает три основных типа коллекций: общего назначения, специализированные и ориентированные на побитовую организацию данных. Коллекции общего назначения определены в пространстве имен System. Collection и реализуют такие структуры данных, как стеки, очереди, динамические массивы, словари. Коллекции специального назначения определены в пространстве имен System. Collection. Specialized и ориентированы на обработку данных конкретного типа или на обработку данных уникальным способом. В пространстве имен System. Collection определена единственная коллекция, ориентированная на побитовую организацию данных, которая служит для хранения групп битов и поддерживает такой набор операций, который не характерен для коллекций других типов. Классы коллекций общего назначения: Stack - Стек - частный случай однонаправленного списка, действующий по принципу: последним пришел - первым вышел. Queue - Очередь - частный случай однонаправленного списка, действующего по принципу: первым пришел - первым вышел. ArrayList - Динамический массив, т. е. массив который при необходимости может увеличивать свой размер. Hashtable - Хеш-таблица для пар ключ/значение. SortedList - Отсортированный список пар ключ/значение.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|