Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Obektno-orientirovannoe_programmirovanie.doc
Скачиваний:
14
Добавлен:
19.08.2019
Размер:
271.36 Кб
Скачать

28. Интерфейсы в с#.

Интерфейс – абстрактный класс, в котором кроме открытых абстрактных методов, свойств и событий, индексаторов нет других компонентов. Интерфейс определяет, что может сделать класс, но он не определяет, как это будет сделано. Для определения интерфейса используется ключевое слово interface.

Public interface IPlayer

{void Play();

Viod Stop();

Void Forward();

}

Интерфейс – ссылочный тип данных. В нем можно определить методы, свойства, индексаторы и события. Каждый компонент интерфейса является неявно абстрактным, модификатор доступа неявно public. Явно все это в интерфейсе не указывается. Имя интерфейса принято начинать с I. Для интерфейсов возможно наследование, синтаксис такой же, как для классов. Но в отличие от классов допустимо множественное наследование.

Public interface IBase1

{void MethodA();}

Public interface IBase2

{void MethodB();}

Public interface IMyInterface: Ibase1, IBase2

{void MethodC();}

От интерфейсов могут наследоваться структуры и классы. Класс, который наследует интерфейс, обязан наследовать все его методы. В реализации методов в классе не следует указывать модификатор override, в отличие от абстрактного класса, абстрактные методы, которые нужно перекрывать с использованием данного модификатора. О такой ситуации, когда класс наследует интерфейс и реализует все его методы, говорят, что класс поддерживает интерфейс. Один класс может наследоваться сразу от нескольких интерфейсов – единственный способ реализации множественного наследования. Класс может наследоваться и от другого класса и интерфейса или интерфейсов. В этом случае первым в списке указывают класс, а затем перечисляют интерфейсы. Порядок следования интерфейсов значения не имеет. Если класс поддерживает какой-либо интерфейс, то он должен поддерживать и все базовые интерфейсы данного. При наследовании класса наследование идет от последнего интерфейса в иерархии, но при этом реализуются и методы всех базовых интерфейсов.

29. Виды массивов в c#.

Массив – индексированный набор элементов одного типа. В С# индексация начинается с нуля и изменить это нельзя. Для реализации массивов в C# существует класс System.Array. Для него реализована встроенная поддержка.

Тип [] имя_переменной

Int [] a1 = new int [10];

Int [] a2 = {1,2,3};

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

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

В первом случае создается массив из заданного количества элементов(10), инициализация значений по умолчанию. Следующие 3 способа абсолютно одинаковы. Массив задается определением его элементов явно. В любом случае длина массива задается при его создании, а не определении. Для указания длины массива обычно используются константы, но это м.б. и переменная или выражение, если не определяется значение его элементов. Возможно создание массивов структур, объектов, классов и интерфейсов. Если не инициализировать элементы массивов ссылочных типов, то каждый элемент будет содержать нулевую ссылку null. Место в куче под каждый элемент требуется выделять отдельно.

Class MyClass

MyClass [] ac = {new MuClass(), newMyClass, newMyClass(2)};

или

MyClass [] ac = new MyClas[3];

Ac [0] = newMyClass();

Ac[1] = newMyClass();

Ac[2]= newMyClass();

Прямоугольные массивы – это массивы с 2 и более измерениями.

Тип [,] имя

Тип [, ,] имя

Int [,] aa5 = new int [3,4];

Int [,] aa6 = {{2,3},{4,5},{6,7}};

Int [,] aa7 = new int [3,2] {{2,3}, {4,5}, {6,7}};

Невыровненные массивы(jagged arrays)-массив массивовневыровненный потому, что сотавляющие его массивы могут иметь различную длину.

Тип [] имя

Int [] [] ja = new int [4] [];

Ja[0] = new int [2];

Ja[1] = new int [4];

Ja[2] = new int [3];

Обращение к неинициализированному элементу массива приводит к возникновению исключения System.NullReferenceExceprion.