Заявления только в методах, но как насчет объявлений? - PullRequest
2 голосов
/ 05 октября 2010

На MSDN я нашел:

В C # каждая выполняемая инструкция выполняется в контексте метода.

Но я также читал, что оператор int A=5; может быть в теле класса. Кажется, что это не в теле метода, так почему это возможно? Это, вероятно, просто термин путаница, но я хотел бы знать.

Ответы [ 3 ]

8 голосов
/ 05 октября 2010

Адриан прав.Для уточнения: «int A = 5;»это только утверждение, когда оно находится внутри тела метода.Если он находится вне тела метода, то это объявление поля с инициализатором, которое логически перемещается в тело конструктора.

Точная семантика того, как работают инициализаторы, немного сложна.Некоторые мысли об этом см .:

http://blogs.msdn.com/b/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order-as-constructors-part-one.aspx

http://blogs.msdn.com/b/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite-order-as-constructors-part-two.aspx

6 голосов
/ 05 октября 2010
class Example
{
    int A = 5;
}

равно

class Example
{
    int A;

    public Example()
    { 
        A = 5;
    }
}

Таким образом, присвоение все еще является частью метода (конструктора).

1 голос
/ 05 октября 2010

Вы, вероятно, имеете в виду инициализацию полей:

class Foo
{
    private static int i = 5;
}

Даже эта инструкция выполняется в контексте метода.В данном конкретном случае это статический конструктор.Если поле не является статическим, оно будет обычным конструктором.

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