The_Unknown_Member Ответов: 2

[C#] почему, когда основной метод статичен, все остальные методы должны быть статичными ?


Привет, люди. У меня есть путаница в понимании того, почему, когда основной метод статичен, все остальные методы тоже должны быть статичными ? Кто-нибудь может мне это объяснить ?

Что я уже пробовал:

Задавая вопрос здесь, в CodeProject.com

2 Ответов

Рейтинг:
9

Paulo Zemek

Они не должны быть полностью статичными. Тем не менее, статический метод не имеет объекта (этот объект), в то время как нестатические методы имеют его.

Вы можете очень легко это сделать:

class Program
{
  static void Main()
  {
    var program = new Program();
    program.DoSomething();
  }

  void DoSomething()
  {
    // here this will be available, and will be the program
    // variable created in the Main call. Note that you could
    // create more than one instance of the Program class.
  }
}


The_Unknown_Member

Спасибо и Вам за ответ!

Рейтинг:
13

OriginalGriff

Это не так!

То main метод должен быть статическим, потому что статические методы не нуждаются в экземпляре класса для вызова - все нестатические методы требуют создания экземпляра класса, прежде чем вы сможете их вызвать.
Поскольку основной метод-это то место, где начинается ваше приложение, вы не можете сначала создать экземпляр класса (потому что конструктор экземпляра должен был бы запуститься, прежде чем вы могли бы вызвать main метод).

Однажды main был вызван он может создавать экземпляры и вызывать нестатические методы на этих экземплярах:

static void main()
   {
   MyClass mc = new MyClass();
   ms.DoSomething();
   }


The_Unknown_Member

Спасибо тебе, парень! Теперь я понял, что нет никаких проблем, если я не сделаю свои методы статичными в классе, мне придется сделать экземпляр моего класса, прежде чем использовать их. Как это например:

использование системы;

программа занятий
{
static void Main (string[] args)
{
Программа p = новая программа();
p. разделите(4, 2);
}

void divide(int a, int b)
{
Приставка.WriteLine(a / b);
}
}

OriginalGriff

Пожалуйста!