То, что вы видите, - это разница между живой семантической проверкой ошибок IDE и фактическим запуском компилятора. Живая семантическая проверка использует компилятор C #, но не имеет 100% -ной четности с ним, и может давать ложные срабатывания в угловых случаях языка.
Чтобы избавиться от этого, отключите живую семантическую проверку
- Инструменты -> Параметры
- Текстовый редактор -> C # -> Дополнительно
- Снимите флажок «Показать живые семантические ошибки»
Еще один способ исправить это - использовать фактический синтаксис, поддерживаемый C #, для необязательных значений
public Square(int side = 0) { }