- •Объектно-ориентированное программирование
- •1. Классы и объекты в ооп.
- •2. Абстрагирование в ооп.
- •3. Инкапсуляция в ооп.
- •4. Наследование в ооп.
- •5. Полиморфизм в ооп.
- •6. Описание классов с с#.
- •7. Модификаторы доступа к компонентам классов в с#.
- •8. Статические компоненты класса в c#
- •9. Способы достижения инкапсуляции в c#.
- •10. Свойства классов в c#
- •11. Конструкторы классов в c#. Порядок вызова конструкторов.
- •12. Использование ключевого слова this в c#.
- •13. Передача параметров методов в c#
- •14. Структурные (value-based) и ссылочные (reference-based) типы.
- •15. Перечисляемые типы в c#.
- •16. Перегрузка операторов в c#.
- •17. Исключительные ситуации в c#.
- •18. Способы обработки ошибок.
- •19. Платформа .Net: основные компоненты в c#.
- •20. Механизмы управления памятью в c#
- •21. Наследование в c#
- •22. Классы, закрытые для наследования в c#
- •23. Модификатор new в c#
- •24.Полиморфизм в c#.
- •25. Виртуальные и невиртуальные методы в c#.
- •26. Приведение и проверка типов в c#.
- •27. Абстрактные классы в c#.
- •28. Интерфейсы в с#.
- •29. Виды массивов в c#.
- •30. Пользователькие индексаторы в c#.
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.