Почему и когда есть вещи, которые я не могу сделать в CLASS SCOPE в C #? - PullRequest
2 голосов
/ 20 июля 2010

ну ... я не понимаю, что я могу сделать и что я не могу сделать в CLASS SCOPE.

Например

=========================

class myclass
{


  int myint = 0;

  myint = 5; *// this doesnt work. Intellisense doesn't letme work with myint... why?*

  void method()
  {
    myint = 5; *//this works. but why inside a method?*
  } 
}

==================================

class class1
{ 
 public int myint;
}

class class2
{
  class1 Z = new class1();

  Z.myint = 5; *//this doesnt work. like Z doesnt exists for intellisense*

 void method()
  {
    Z.myint = 5; *//this Works, but why inside a method?*
  }
}

То, что я делаю так много ошибок, я не понимаю, что работает в области классов, а что нет.

Я знаюЕсть местные переменные и его жизненный цикл.Но я не очень хорошо понимаю эту идею.

Ответы [ 6 ]

8 голосов
/ 20 июля 2010

Класс может содержать только объявления , инициализации и методы .Он не может содержать собственных операторов .

class MyClass
{
    int x; // a declaration: okay
    int y = 5; // a declaration with an initialization: okay
    int GetZ() { return x + y; } // a method: okay

    x = y; // a statement: not okay
}
1 голос
/ 20 июля 2010

Вы не можете сделать следующее:

class myclass
{
  int myint = 0;
  myint = 5;

Поскольку делать нечего, вы можете только объявить членов и, возможно, установить начальное значение.Это не имеет ничего общего с областью применения.Одна из причин, по которой вы не можете этого сделать, заключается в том, что нет гарантии порядка, компилятор просто гарантирует, что все значения будут инициализированы к моменту создания класса.Вот почему вы также не можете сделать следующее:

class myclass
{
  int myint = 0;
  int MyOtherInt = myint;

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

1 голос
/ 20 июля 2010

Вы можете инициализировать поле, но вы не можете просто иметь операторы присваивания.

0 голосов
/ 20 июля 2010

Чтобы четко понять это и получить ответы на свои вопросы, вы должны прочитать Джеффри Рихтера "CLR via C #, третье издание" и C # 4.0 Спецификация языка

0 голосов
/ 20 июля 2010

Определение класса определяет его структуру, то есть поля, свойства, методы, события и т. Д., Которые он содержит.«Работа» на самом деле выполняется внутри методов.

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

0 голосов
/ 20 июля 2010

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

но поскольку c # хочет помочь вам, он позволяет вам определять начальные состояния для полей. и они в основном выполняются непосредственно перед вашим кодом конструктора.

когда вы хотите определить код внутри класса. где-то ... программа не знает, когда выполнять. поэтому они запрещены.

...