- •3. Ооп. Методы, перегрузка, переопределение.
- •4. Ооп. Полиморфизм.
- •5. Методы класса. Конструкторы. Виды конструкторов. Статические методы и поля.
- •6. Понятие сложности алгоритма. Типовые виды алгоритмической сложности.
- •7. Исключения (try, catch, finally).
- •8. Интерфейсы, применение предназначения.
- •9. Generic типы.
- •10. Ограничения Generic типов.
- •11. Структуры данных. Динамический массив.
- •12. Структуры данных. Список.
- •13. Структуры данных. Двунаправленный список.
- •14. Структуры данных. Хеш-таблица.
- •15. Структуры данных. Стек.
- •16. Структуры данных. Очередь.
- •17. Коллекции в c#, описать какие структуры данных реализуют.
- •18. Матрицы преобразований.
- •19. Основы теории графов, что это такое, применение.
- •20. Граф. Способы задания графа.
8. Интерфейсы, применение предназначения.
ИНТЕРФЕЙСЫ, применение и предназначение
Основное понятие:
Интерфейс - это набор логически связанных абстрактных членов. Интерфейс описывает функциональность классов, но не определяет способа ее реализации.
Синтаксис интерфейса:
interface имя_интерфейса
{
Список абстрактных методов
}
Реализация интерфейсов
Класс может иметь только одного предка, но реализовывать сколько угодно интерфейсов
• Пример
class Rectangle : Figure, IFigure
{
\\\\\\
}
Для интерфейса могут использоваться спецификаторы new, public, internal и private.
Спецификатор new применяется для вложенных интерфейсов.
По умолчанию интерфейс доступен только из
сборки, в которой он описан, по умолчанию используется спецификатор internal.
Все функциональные члены интерфейса по определению являются открытыми (public) и
абстрактными (abstract), поэтому при описании метода указывается только тип возвращаемого им значения и сигнатура.
Ограничения при использовании интерфейсов
1.Интерфейс не реализует методы.
2.Интерфейс не может определять поля, конструкторы, деструкторы или операторные методы.
3.Ни один член интерфейса не может быть объявлен статическим.
4.Методы неявно являются открытыми (public- методами), не разрешается явным образом указывать спецификатор доступа.
Пример интерфейса
interface IDraw
{
void Draw();
}
interface IFigure
{
void Move(double dx, double dy);
void Resize(double scalex, double scaley);
double X { set; get; } double Y { set; get; }
}
9. Generic типы.
Generic типы
Generic типы (обобщения) используются в ситуациях, когда поведение алгоритма не зависит от типа данных, с которым осуществляется работа. Generic нужны для облегчения работы. Например обычный метод с int обрабатывает только целочисленные массивы, а с Generic работает с любым типом массивов.
static void WriteArr(int[] arr)
{
foreach (var item in arr)
Console.WriteLine(item);
}
Обобщённые методы
void WriteArr<T> ( T[] arr ) {}
Обобщённые типы (классы и структуры)
Class MyList<T>
Struct Pair<Tkey, TValue>
Обобщённые интерфейсы
Interface IDrawable<T>
Обобщённые делегаты
delegate void DoSomething<T> (T x, T y)
Пример Generic
static void Print<T> (T[] arr)
{
foreach (var item in arr)
{
Console.Write(item);
}
}
static void Main(string[] args)
{
int[] = {....};
string[]s = {"....", "...",...};
Print <int>(i);
Print(S);
}
10. Ограничения Generic типов.
Ограничения Generic типов
Действия выполнимы только если компилятор о них знает:
T Max<T>( T, x, T, y)
{
return x>y ? x: y;
}
Правильная реализация:
T Max<T>( T, x, T, y) where T : IComparable<T>
{
return x.CompareTo(y) > 0 ? x:y;
}
Синтаксис:
where шаблон: список_ограничений
where T: struct Структура (value-type)
where T: class Класс (reference-type)
where T: new() Тип должен иметь конструктор по умолчанию
where T: имя класса Соответствует указанному классу или его потомкам where T: имя интерфейса Реализует указанный интерфейс
where TChild: TBase TChild — класс, являющийся потомком класса TBase
Пример Generic
static void Print<T> (T[] arr)
{
foreach (var item in arr)
{
Console.Write(item);
}
}
static void Main(string[] args)
{
int[] = {....};
string[]s = {"....", "...",...};
Print <int>(i);
Print(S);
}