1/11
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai | Chat |
|---|
No analytics yet
Send a link to your students to track their progress
Generics?
Механизм, позволяющий писать классы/методы/интерфейсы, работающие с любым типом данных, который указывается при использовании, а не жёстко задан заранее.
Зачем нужны если есть object?
Generics дают типобезопасность на этапе компиляции и не требуют боксинга/анбоксинга — это быстрее и безопаснее, чем работа через object с постоянными приведениями типов.
Что такое T в Container<T>?
Параметр типа (type parameter) — placeholder, который заменяется конкретным типом в момент использования класса/метода.
constraint?
Условие после where, которое ограничивает, какие типы можно подставить вместо T (например, требует наличие интерфейса, конструктора, или что тип — класс/структура, можно использовать сразу несколько).
Что означает where T : class?(struct)
T должен быть ссылочным типом (reference type) — подходят классы, интерфейсы, делегаты, массивы. Value-типы (int, struct) не подходят.
T должен быть значимым типом
Что означает where T : new()?
T обязан иметь публичный конструктор без параметров — это нужно, чтобы внутри generic-кода можно было писать new T().
Что означает where T : IComparable<T>?
T обязан реализовывать интерфейс IComparable<T>, то есть иметь метод CompareTo — это позволяет сравнивать объекты типа T (используется, например, в FindMax).
Что делает CompareTo и что означают его результаты?
Сравнивает текущий объект с other. Возвращает: отрицательное число если меньше, 0 если равны, положительное число если больше.
Как строки сравниваются через CompareTo?
лексикографически (по алфавиту), посимвольно слева направо, пока не найдётся первое различие.
Что такое IComparer<T>?
Интерфейс с методом Compare(T a, T b) — отдельный, внешний объект, который умеет сравнивать два объекта типа T определённым, самостоятельно заданным способом.
В чём разница между IComparable<T> и IComparer<T>?
IComparable<T> — класс сам объявляет, как сравнивать себя с другим объектом своего типа (встроенная, "стандартная" логика). IComparer<T> — отдельный внешний объект, который задаёт альтернативный способ сравнения, не трогая сам класс.
Какой метод нужно реализовать в IComparer<T>?
Как использовать IComparer<T> при сортировке?
int Compare(T a, T b) — возвращает отрицательное число если a меньше b, 0 если равны, положительное если a больше b (та же логика знака, что и в CompareTo).
Передать экземпляр компаратора вторым параметром в метод сортировки: Array.Sort(array, new MyComparer()) или list.Sort(new MyComparer()).