Есть ли разница между блоками инициализации и блоками для обозначения области видимости? - PullRequest
1 голос
/ 16 октября 2011

Если вы пишете класс и используете что-то вроде этого

...
int x;
{ x = 2; }
...

Это будет блок инициализации, верно?

Так как бы вы использовали фигурные скобки только для обозначения области видимости, такчто они выполняются как любой другой код?В основном, поэтому они не являются частью конструктора.

Пример

Если бы вы использовали блок внутри оператора switch, это было бы выполнено как блок инициализации?

    switch(...)
    {
    case :
    { // this right here how does the compiler know the difference?
    ...
    break;
    }
    }

1 Ответ

2 голосов
/ 16 октября 2011

Блоки инициализации применяются только к блокам, которые находятся в области видимости класса и перед ними не предшествует прототип функции (то есть блоки, которые не являются телом функции).

Внутри тела функции любые блоки, которые вы создаете, будут вводить область видимости, но не будут интерпретироваться как инициализация.

Пример:

public class NameOfClass {
    {
        // This is an initalization block
    }

    AccessModifier ReturnType nameOfFunction(ParamType nameOfParam) {
        // This is a function body and is not an initialization

        {
          // This introduces scope, is not an initialization
        }
    }
}
...