C# C#  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Средний  · 

Обобщения и ограничения

Проверяет, умеете ли вы выражать типовые связи через обобщения, ограничения и вариантность. Задания затрагивают вывод параметров типа, comparer, фабрики, ковариантность и признаки ложной универсальности API.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 20
Какой плюс у List<int> перед ArrayList?
C#
var typed = new List<int> { 1, 2, 3 };
int first = typed[0];

var legacy = new ArrayList { 1, "two" };
int value = (int)legacy[0];
Вопрос 2 из 20
Какой тип выведет компилятор для T?
C#
static T Identity<T>(T value) => value;
var x = Identity("hello");
Вопрос 3 из 20
Можно ли иметь одновременно Pair<int,string> и Pair<string,int>?
Вопрос 4 из 20
Почему generic-метод Max<T> не может использовать оператор > без дополнительных средств?
C#
static T Max<T>(T a, T b)
{
    // return a > b ? a : b; // контракт T этого не обещает
}
Вопрос 5 из 20
Когда non-generic API с object всё ещё оправдан?
Вопрос 6 из 20
Что позволяет where T : IComparable<T>?
C#
static T Max<T>(T left, T right) where T : IComparable<T> =>
    left.CompareTo(right) >= 0 ? left : right;
Вопрос 7 из 20
Что требует new() constraint?
C#
static T Create<T>() where T : new() => new T();
var item = Create<List<int>>();
Вопрос 8 из 20
Почему where T : struct исключает int??
Вопрос 9 из 20
Как объявить контракт ключа, для которого не ожидается nullable-значение?
C#
class Cache<TKey, TValue> where TKey : notnull
{
    private readonly Dictionary<TKey, TValue> data = new();
}
Вопрос 10 из 20
Когда лучше передать Func<T> factory вместо new()?
Вопрос 11 из 20
Почему IEnumerable<string> можно использовать как IEnumerable<object>?
C#
IEnumerable<string> names = new[] { "A", "B" };
IEnumerable<object> objects = names;
Вопрос 12 из 20
Почему List<string> нельзя присвоить List<object>?
Вопрос 13 из 20
В каком направлении работает Action<in T>?
C#
Action<object> printObject = o => Console.WriteLine(o);
Action<string> printString = printObject;
printString("ok");
Вопрос 14 из 20
Где разрешены in/out в объявлении generic-параметра?
Вопрос 15 из 20
Почему out T нельзя использовать как тип входного параметра метода интерфейса?
Вопрос 16 из 20
Как переиспользовать сортировку для разных правил?
C#
static void SortBy<T>(List<T> items, IComparer<T> comparer) =>
    items.Sort(comparer);

SortBy(users, UserByNameComparer.Instance);
Вопрос 17 из 20
Когда extension generic-метод оправдан?
Вопрос 18 из 20
Что не так с Repository<T> без ограничений и предметного контракта?
Вопрос 19 из 20
Как сделать generic-алгоритм создания тестируемым?
C#
static IReadOnlyList<T> Build<T>(int count, Func<int, T> factory) =>
    Enumerable.Range(0, count).Select(factory).ToArray();
Вопрос 20 из 20
Какой признак говорит, что generic-абстракция неудачна?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу