Заявления не могут существовать вне методов? - PullRequest
2 голосов
/ 15 мая 2011

Читая книгу (VS 2010), он говорит, что команды (операторы) в .NET Csharp не могут существовать вне метода.Мне интересно - декларация полей и т. Д., Это команды, не так ли?И они существуют на уровне класса.Может кто-нибудь уточнить это немного?

Ответы [ 6 ]

1 голос
/ 15 мая 2011

Инициализатор поля пишется с кодом вне метода, но компилятор помещает этот код в конструктор.

Таким образом, инициализатор поля, такой как:

class Foo  {

  int Bar = 42;

}

, по сути, являетсяполе и инициализатор в конструкторе:

class Foo  {

  int Bar;

  Foo() {
    Bar = 42;
  }

}
1 голос
/ 15 мая 2011

Если вы имеете в виду:

class Foo
{
    int count = 0;
    StringBuilder buffer = new StringBuilder();
}

Количество и буфер являются объявлениями с использованием инициализатора выражений .Но этот код не содержит операторов .

0 голосов
/ 15 мая 2011

Классы, пространства имен, объявления полей не являются операторами объявлений.

Поле может быть инициализировано вне метода с выражением , но, хотя выражение является оператором, существует множество операторовне являются выражениями (например, if).

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

0 голосов
/ 15 мая 2011

В C # нет такого понятия, как «команда».

И объявление статической / переменной экземпляра не классифицируется как оператор в C # - это объявление поля (которое является типом объявления члена класса ) как согласно спецификации C #. См., Например, раздел 10.5 C # 4 spec .

Теперь операторы, которые объявляют локальные переменные, являются операторами, как определено объявление-оператор в спецификации (раздел 8.5). Они используются только для местных жителей, хотя. См. Раздел B.2.5 для получения полного списка производимых операторов в C # 4.

По сути, спецификация C # определяет используемую терминологию - поэтому, хотя вы можете думать неофициально о «командах» и т.п., в смысле корректности спецификация C # является источником полномочий. (За исключением случаев, когда там не сказано, что хотели сказать дизайнеры языка. Это довольно редко.)

0 голосов
/ 15 мая 2011

Нет, это декларации.Точнее, объявления членов класса.

И те, кто находится вне метода, совершенно законно.В противном случае вы не могли бы объявить метод во-первых!

"Заявлениями" книга говорит вам, что вы не можете иметь такие вещи, как вызовы методов вне метода,Например, следующий код недопустим:

public void DoSomething()
{
    // Do something here...
}

MessageBox.Show("This statement is not allowed because it is outside a method.");
0 голосов
/ 15 мая 2011

Как вы сказали, они являются декларациями, оператор, который действительно что-то делает.

...