Результат: ученик представляет выполнение как последовательность состояний, объявляет и изменяет локальные переменные, выбирает статический тип по смыслу и диапазону и безопасно моделирует возможное отсутствие значения.

Содержание:

  1. Понять переменную как часть состояния программы

    • имя, статический тип и текущее значение;
    • объявление переменной и момент появления имени;
    • инициализация при объявлении;
    • последующее присваивание нового значения;
    • таблица состояния после каждой значимой инструкции.
  2. Освоить обязательное присваивание до чтения

    • объявление локальной переменной без инициализатора;
    • определённое присваивание, проверяемое компилятором;
    • различие объявления, записи и чтения;
    • отсутствие автоматически доступного значения у неинициализированной локальной переменной;
    • порядок инструкций как условие допустимости чтения.
  3. Понять статическую типизацию и вывод типа

    • статический тип переменной и выражения;
    • допустимые операции, определяемые типом;
    • проверка совместимости при компиляции;
    • var только при наличии инициализатора;
    • вывод конкретного статического типа без перехода к динамической типизации;
    • невозможность позже присвоить значение несовместимого типа.
  4. Выбирать целочисленный тип

    • sbyte, short, int, long;
    • byte, ushort, uint, ulong;
    • размер типа, минимальное и максимальное значения;
    • знаковые и беззнаковые диапазоны;
    • выбор типа по предметному диапазону и последующим операциям;
    • осторожность при смешивании знаковых и беззнаковых значений.
  5. Записывать целочисленные литералы

    • десятичная, двоичная и шестнадцатеричная формы;
    • разделитель разрядов _;
    • суффиксы U, L и UL;
    • тип литерала без суффикса;
    • влияние литерала на тип всего выражения.
  6. Выбирать дробный тип

    • float, double и decimal;
    • различие двоичной и десятичной моделей;
    • диапазон и приблизительная точность;
    • литералы без суффикса и суффиксы F и M;
    • выбор double для общих вычислений и decimal для десятичной предметной модели;
    • невозможность смешивать decimal с float или double без явного решения.
  7. Использовать логические, символьные и строковые значения

    • bool и литералы true, false;
    • char как одна кодовая единица UTF-16;
    • string как строковое значение;
    • различие 'A' и "A";
    • управляющие последовательности;
    • Unicode escape-последовательности;
    • дословные строки @"...".
  8. Моделировать отсутствие значения

    • null как отсутствие ссылочного либо nullable-значимого значения;
    • nullable-значимые типы T?;
    • nullable-ссылочные типы T?;
    • предупреждения nullable-анализа;
    • проверки is null, is not null и сравнение с null;
    • различие отсутствия значения и нулевого, пустого или ложного значения.
  9. Управлять областью действия и временем жизни имени

    • область видимости локальной переменной;
    • вложенные блоки;
    • доступность имени только после объявления;
    • завершение области действия при выходе из блока;
    • различие времени жизни имени и дальнейшего существования объекта, рассматриваемого позднее.