Переменные области в C #? - PullRequest
       10

Переменные области в C #?

2 голосов
/ 01 августа 2011

Я читаю некоторый текст C # относительно области видимости переменных и получил некоторую путаницу:

Случай 1:

class A
{
   void F() {
      i = 1;
   }
   int i = 0;
}

Случай 2

class A
{
    void F()
    {
         i = 1;  // Error, use precedes declaration
         int i = 0;
     }
}

в обоих case 1 и 2, переменная i используется до того, как она объявлена ​​и инициализирована, но почему в случае 2 произошла ошибка?(Я прочитал объяснение, потому что я - глобальная переменная в случае 1, но все же хочу знать, есть ли другое объяснение)

Ответы [ 3 ]

7 голосов
/ 01 августа 2011

int i является переменной класса в случае 1. Когда класс определен, также определены все переменные, определенные в области действия class, а не каждая method.

ВВ случае 2 вы определяете переменную как часть method и ПОСЛЕ того, как вы ее используете.

1 голос
/ 01 августа 2011

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

в случае 2, переменная i является локальной переменной для функции, поэтому недопустимо делать это таким образом.

0 голосов
/ 01 августа 2011

Когда вы объявляете переменные внутри блока кода класса, который делает его переменной-членом, которая доступна по крайней мере для любой функции в классе. Если вы создаете другую функцию, она также может ссылаться на «i». Ваша переменная обнуляется, когда создается экземпляр объекта для класса.

Это не работает во втором классе, потому что это не было объявлено заранее.

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