Это интересный случай, когда эвристика сообщения об ошибках ошибается. Здесь происходит то, что компилятор видит
public bool IsValid()
{
И говорит себе: «Ага, здесь у нас есть публичный метод IsValid, который не принимает аргументов и возвращает bool. Я обработаю все после него как список операторов в блоке тела метода.
Тогда он видит
get
Интересный факт: get не является зарезервированным словом C # . (Я обсуждаю этот факт здесь .)
Таким образом, сейчас компилятор считает, что это оператор, начинающийся с идентификатора "get". Что это может быть за заявление? Это может быть объявление локальной переменной:
get myGet = new get();
Это может быть вызов метода или делегата:
get();
Это может быть увеличение или уменьшение поля с именем get.
get++;
Это может быть метка помеченного оператора.
get: M();
Может быть получателем вызова метода:
get.M();
Это может быть присвоение полю:
get = null;
Это может быть сумматор событий:
get += M;
И я уверен, что есть дюжина случаев, которые я пропускаю. Я хочу сказать, что это может быть любая из этих вещей. Компилятор посмотрит на следующий токен, чтобы попытаться выяснить, в каком из этих десятков случаев мы на самом деле находимся. А потом то, что на самом деле видит компилятор, это
get {
и это объясняет: «Хм, это плохо. Это начало нового блока. Я знаю, что должно быть что-то после получения идентификатора и до начала нового блока, но Я не знаю, что это было. Это может быть двоеточие, точка, плюс ... Я не знаю, это может быть что угодно. Есть ли что-то, что я знаю? Да. Я знаю это в тот самый момент. по крайней мере, всегда должна быть точка с запятой между концом оператора, начинающегося с get, и началом следующего за ним блока . Поэтому я сообщу об ошибке «отсутствует точка с запятой», потому что это лучшее, что я можно сделать в этот момент. "
То, что мы могли бы сделать, это специальная ситуация: «get - это первое, что в блоке метода может быть свойством, за которым сразу следует левая фигурная скобка», а затем сообщить об особой ошибке в этом случае ». эй, похоже, вы пытаетесь написать свойство, которое принимает аргументы ". Но, видимо, мы не думали об этой ситуации при разработке эвристики ошибок. Это хорошо, так что, возможно, мы сделаем это в гипотетической будущей версии компилятора.