Почему C# позволяет расширять область действия переменной по всему блоку независимо от порядка объявления? (Ссылка на книгу: «C#10 в двух словах», Джозеф Альбахари)

Я читаю книгу Джозефа Альбахари О'Рейли под названием «C#10 в двух словах». При описании локальных переменных в книге говорится следующее:

int x; 

{ 
    int y; 
    int x; // Error - x already defined 
} 

{ 
    int y; // OK - y not in scope 
} 

Console.Write (y); // Error - y is out of scope 

«Область действия переменной распространяется в обоих направлениях по всему ее блоку кода. Это означает, что если мы переместим исходное объявление x в этом примере в конец метода, мы получим ту же ошибку. В отличие от C++, это несколько странно, учитывая, что недопустимо ссылаться на переменную или константу до ее объявления». - Глава 2 C#10 в двух словах

Я попробовал использовать Может кто-нибудь объяснить, что это значит? Будем признательны за любую информацию о поведении этой области и ее последствиях!

🤔 А знаете ли вы, что...
С C# можно разрабатывать мобильные приложения для платформы Android с использованием Xamarin.


50
1

Ответ:

Решено

Пара { } заключает в себе новую «область действия», блок, в котором действительна определенная переменная.

Оба y объявлены в родственных областях. Они не будут мешать друг другу. Также они не будут доступны в родительской области — поэтому Console.WriteLine завершается с ошибкой.

Однако один x определен в «родительской» области, а другой — в дочерней. Это дочернее объявление конфликтует с объявлением, объявленным в родительской области. И это будет даже в том случае, если вы переместите «родителя» int x в конец блока, даже если тогда использовать его раньше будет недопустимо.

{
    int x; // Error - x already defined 
}

int x;