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

Свойства, индексаторы и операторы

Проверяет, как свойства и индексаторы защищают состояние объекта, чем init отличается от обычного setter и когда перегрузка оператора остаётся понятной. Кодовые задания затрагивают инварианты, равенство, хеширование и неожиданные побочные эффекты.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 20
Почему это свойство плохо защищает инвариант «возраст не может быть отрицательным»?
C#
public int Age { get; set; }
Вопрос 2 из 20
Что означает private set?
C#
public sealed class Order
{
    public Order(Guid id) => Id = id;
    public Guid Id { get; private set; }
}
Вопрос 3 из 20
Какой результат выведет код?
C#
class Rect
{
    public int Width { get; set; }
    public int Height { get; set; }
    public int Area => Width * Height;
}
var r = new Rect { Width = 2, Height = 4 };
Console.WriteLine(r.Area);
Вопрос 4 из 20
Для чего нужен required у свойства?
Вопрос 5 из 20
Когда вычисляемое свойство хуже метода?
Вопрос 6 из 20
Какое присваивание допустимо?
C#
class User { public string Name { get; init; } = ""; }
var user = new User { Name = "A" };
// user.Name = "B";
Вопрос 7 из 20
Почему объект всё ещё изменяем?
C#
class Note
{
    public List<string> Tags { get; init; } = new();
}
var n = new Note();
n.Tags.Add("new");
Вопрос 8 из 20
Как усилить неизменяемость коллекционного свойства?
C#
public sealed class Report
{
    public IReadOnlyList<string> Lines { get; init; } = Array.Empty<string>();
}
var report = new Report { Lines = source.ToArray() };
Вопрос 9 из 20
Можно ли присвоить init-свойство из конструктора самого типа?
Вопрос 10 из 20
Какой API лучше для объекта, который должен меняться после создания по проверенным правилам?
Вопрос 11 из 20
Какой элемент вернёт индексатор Letters для индекса 1?
C#
class Letters
{
    private readonly string[] data = { "a", "b", "c" };
    public string this[int i] => data[i];
}
Console.WriteLine(new Letters()[1]);
Вопрос 12 из 20
Кто отвечает за проверку допустимости пользовательского ключа в собственном индексаторе?
Вопрос 13 из 20
Когда метод TryGetValue яснее индексатора?
Вопрос 14 из 20
Что допускает C#-индексатор?
Вопрос 15 из 20
Почему сеттер индексатора может быть опасен в многопоточном контейнере?
C#
counter[key] = counter[key] + 1; // две отдельные операции
Вопрос 16 из 20
Какой результат ожидается от корректного operator + для неизменяемого Vector?
Вопрос 17 из 20
Что следует сделать при перегрузке == для класса-значения?
Вопрос 18 из 20
Какое число выведет программа?
C#
readonly record struct Point(int X, int Y)
{
    public static Point operator +(Point a, Point b) => new(a.X + b.X, a.Y + b.Y);
}
var p = new Point(1, 2) + new Point(4, 5);
Console.WriteLine(p.X + p.Y);
Вопрос 19 из 20
Что даст checked-перегрузка сложения Counter на границе int.MaxValue?
C#
readonly record struct Counter(int Value)
{
    public static Counter operator +(Counter a, Counter b) =>
        new(unchecked(a.Value + b.Value));
    public static Counter operator checked +(Counter a, Counter b) =>
        new(checked(a.Value + b.Value));
}
var x = checked(new Counter(int.MaxValue) + new Counter(1));
Вопрос 20 из 20
Какой оператор лучше не перегружать необычным образом?

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

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

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

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