Внутренняя / вложенная область в методах - PullRequest
1 голос
/ 10 декабря 2011

Я разработчик C #, который давно работает с языком.

Мне интересно, почему язык позволяет использовать вложенные / внутренние области для функций.

Вот пример того, что я имею в виду:

        public int InnerScopeMethod()
    {
        int i = 10;

        //Inner Scope
        {               
            int j = 100;//j will not work outside of the scope.
            i *= j;
        }//Scope Ends Here

    //j = 10 /// This Will Cause Error.
        return i;
    }

Как видите, тело метода имеет анонимную или неназванную область видимости, и это допустимо в C # 4.

Я хочу знать, почему это здесь? Это только для предоставления небольших областей для переменных или для других целей?

Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 10 декабря 2011

Это (обычно, по крайней мере) не обязательно делать это в C #, но затем (как сказал Брэндон Мур), почему бы и нет?

Одной из причин может быть то, что определенные переменные имеют ограниченное время, когдаони действительны, и, поместив эту переменную в область видимости, вы убедитесь, что никто не сможет случайно использовать их позже.

Кроме того, C # основан на C, где эта конструкция очень полезна.В C переменные могут быть объявлены только в начале области, поэтому что-то похожее на то, что вы написали, может быть сделано в длинных методах, если вам нужна только временная переменная в одном месте (например, индекс цикла).

1 голос
/ 10 декабря 2011

Вопрос должен заключаться в том, почему «не будет» это там?Другими словами, какую цель вы бы использовали для использования таких фигурных скобок, если вы не хотите иметь внутреннюю область видимости?И если есть внутренняя область действия для всех других конструкций, которые используют фигурные скобки (т. Е. Любой вид цикла или использование оператора), то почему бы самим использованием фигурных скобок не иметь такого же эффекта?

Редактировать: Я думаюВаш реальный вопрос, однако: «Есть ли когда-нибудь время, когда я бы« хотел »это сделать?»

Что касается моего личного опыта, ответ был бы отрицательным.Но это не значит, что они должны изо всех сил запрещать эту функциональность, которая уже существует (из-за ее существующего использования с различными конструкциями) только потому, что я никогда не буду ее использовать.

0 голосов
/ 12 сентября 2018

Так что такого рода вещи, вероятно, кажутся бесполезными для объектно-ориентированных программистов, которые привыкли к очень маленьким функциям с единственной ответственностью, которые обеспечивают достаточно ограниченную область действия для всех своих локальных переменных.

Однако для процедурного программирования очень важно иметь возможность ограничить область видимости некоторых переменных в одной части очень длинной функции, поскольку это помогает избежать слишком большого количества локальных переменных в одной области видимости, что может привести к ошибкам. если вы случайно использовали неправильный или столкнулись с конфликтами имен и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...