Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Без имени 2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
139.26 Кб
Скачать

18. Члены интерфейсов.

членами интерфейса, кроме объявлений методов, свойств и событий могут быть также объявления индексаторов

И нтерфейсы не могут иметь конструкторов и деструкторов, поскольку создавать экземпляры интерфейса (как и экземпляры абстрактного класса) нельзя

И нтерфейсы не могут содержать полей и констант, а также объявлений операций

К роме того, ни один член интерфейса не может быть объявлен статическим (static )

П о умолчанию интерфейс имеет модификатор доступа private

О бъявления, являющиеся членами интерфейса, не должны содержать модификаторов доступа и неявно являются общедоступными

  1. Реализация интерфейсов

П одобно абстрактным классам интерфейсы могут выступать в роли родителей производных от них классов

В этом случае говорят, что производный класс наследует соответствующий интерфейс

Ф ормат записи класса, который наследует интерфейс, таков:

class имя_класса : имя_интерфейса

{ <тело_класса>}

К ласс, наследник интерфейса, обязан содержать реализацию всех членов интерфейса

П ри этом допускается предоставлять «пустую» реализацию (безо всякого функционального кода), если не требуется ничего делать с данным членом интерфейса

К роме того, можно реализовать члены интерфейса в виде абстрактных членов абстрактных классов

В классах, которые реализуют интерфейсы, можно определять дополнительные члены

Д обавим, например, в класс ByTwos метод getPrevious (), который возвращает предыдущее значение ряда

обавление метода getPrevious () потребовало внесения изменений в реализацию методов, определенных интерфейсом I s eries

Н о поскольку интерфейс для этих методов остается прежним, при изменении не разрушается код, написанный ранее

В этом и заключается одно из достоинств использования интерфейсов

оскольку интерфейс может реализовать любое количество классов, рассмотрим другой класс реализации интерфейса ISeries

П усть это будет класс Primes, который генерирует ряд простых чисел

Новый класс реализации

Тестирование нового класса

Х отя классы Primes и ByTwos генерируют разные ряды чисел, оба они реализуют один и тот же интерфейс Iseries

  1. Системные интерфейсы. .Net Framework.

среде .NET Framework определено множество интерфейсов, которые могут использовать программы

Н апример, интерфейс System. IComparable определяет метод CompareTo (), который позволяет сравнивать объекты; интерфейс System.Collections. ICollection определяет функциональность, общую для всех коллекций

Интерфейс System. Collections. IEnumerator предлагает способ опроса элементов в коллекции

  1. Массивы, объявление и инициализация одномерных массивов.

С интаксис объявления одномерного массива аналогичен синтаксису такого объявления в C++ (квадратные скобки после имени типа!):

<тип_элемента>[ ] <имя_массива> [=<инициализатор>];

Поскольку массивы реализуются как объекты, их создание состоит из двух этапов:

объявления ссылочной переменной, играющей роль имени массива;

выделения памяти для размещения указанного числа элементов

Размер массива – константное выражение целого типа

Р абота с одномерным массивом ведется обычным образом

  1. Массивы, объявление и инициализация двумерных массивов.

интаксис объявления имеет вид:

<тип_элемента>[ , ] <имя_массива> [=<инициализатор>];

Е сли инициализатор не используется, то запрос на выделение памяти делается с помощью операции new :

new <тип_элемента> [<размер1>, <размер2>] ;

О бращение к элементу двумерного массива производится привычным способом: указывается имя массива и два индекса, разделенные запятой

Н апример:

table [ 3 , 5] = 10;

  1. Ломаные массивы.

Д вумерные массивы – это одномерные массивы массивов, поэтому длины строк в таблице могут иметь разную длину

Т акие массивы называются ломаными (jagged) и объявляются несколько иначе:

<тип_элемента>[ ] [ ] <имя_массива> ;

З апрос памяти производится в два этапа: сначала с указанием числа строк:

<имя_массива> = new <тип_элемента> [<число_строк>] [ ] ;

атем для каждой строки делается отдельный запрос на выделение памяти:

<имя_массива> [<индекс_строки>] = new <тип_элемента> <размер_текущей_строки>] ;

О бращение к элементу ломаного массива производится способом, принятым в языке C++ : указывается имя массива и два индекса, каждый в своих квадратных скобках

Н апример:

jag [ 2 ] [ 4] = 10;

  1. Объектные свойства массивов. Класс System Array

О бъектная реализация массивов приводит к целому ряду специфических черт массивов C#

В о-первых, имена массивов являются ссылками на соответствующие объекты, поэтому применение к ним операции присваивания не приводит к созданию нового массива

Н апример:

int[] nums 1 = new int[ 4 ] {1, 2, 3, 4};

В о-вторых, при объявлении пользователем массива «за кадром» создается класс, наследник системного класса System.Array , и экземпляр этого класса, представляющий этот массив

В соответствии с принципом наследования пользовательский массив получает доступ к методам и свойствам класса System.Array

В первую очередь стоит отметить свойство для чтения Length , позволяющее получить размер массива

  1. Оператор foreach.

Ц икл foreach позволяет обращаться к каждому элементу в массиве с помощью простого синтаксиса:

foreach ( <базовый_тип> <имя> in <имя_массива> )

Э тот цикл будет осуществлять проход по всем элементам и помещать каждый из них по очереди в переменную <имя>

П ри этом не используется информация о количестве элементов в массиве