Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...