Подтвердить что ты не робот

Почему основной должен быть статичным?

Я попытался создать public void Main() в С#; он не говорит, что статическая пустота Main найдена.
Что именно означает, что Main статично? Я знаю, что код отлично работает для public static void Main().

Но почему Main должен быть static?

4b9b3361

Ответ 1

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

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

Как говорит Дэвид, вы можете просто добавить ключевое слово static в определение функции, чтобы изменить его. Его ценность - поиск статических (класс) методов и методов экземпляра, и знание разницы может быть полезно время от времени.

Ответ 2

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

Взгляните на спецификацию языка С#:

Запуск приложения происходит, когда среда выполнения вызывает назначенный метод, который упоминается как запись приложения точка. Этот метод точки входа всегда называется Main и должен иметь одна из следующих подписей:
static void Main() {...}
static void Main (string [] args) {...}
static int Main() {...}
static int Main (string [] args) {...}

Как показано, точка входа может быть необязательно возвращает значение int. Это возвращаемое значение используется в приложении (§10.2).

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

Ответ 3

В классе есть два типа методов:

  • Нестатический метод
  • Статический метод

// Example of static and non-static methods and how to call
namespace TestStaticVoidMain
{
    class Program
    {
        Static Void Main(string[] args)
        {
           // Instantiate or create object of the non-static method:
            Exam ob = new Exam();
            // Call the instance:
            ob.Test1();

            // Directly the call the static method by its class:
            Exam.Test2();

            Console.ReadKey();
        }
    }
    class Exam
    {
        public void Test1()
        {
            Console.WriteLine("This is a non-static method");
        }

        public static void Test2()
        {
            Console.WriteLine("This is a static method");
        }
    }
}

1. Статический метод:

Чтобы вызвать статический метод (функцию), нам не нужно создавать экземпляр или создавать объект этого метода. Мы не можем использовать ключевое слово new, потому что, когда класс загружается и компилируется, ключевое слово static по умолчанию создает или создает объект этого метода класса, поэтому мы напрямую вызываем статический метод.

В отношении static void Main(string[] args) мы уже обсуждали static. Остальная часть void Main(string[] args). void - тип данных, который ничего не возвращает. Main() является стандартной точкой входа в выполнение программы С#. Необязательный аргумент string[] args получает необязательные параметры "командной строки", с которыми была запущена программа.

2. Нестатический метод:

Чтобы вызвать нестатический метод, мы должны создать экземпляр или создать объект метода класса для вызова метода (функции) класса с помощью ключевого слова new.

Если класс с именем Test имеет нестатический метод с именем show(), то как он вызовет экземпляр:

// to call non-static method
Test ob=new Test();
ob.show();

Ответ 4

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

Если вызов статического метода "проще", чем создание экземпляра нового объекта и вызов метода на нем, однако, на самом деле нет никакой пользы от необходимости требовать, чтобы структура использовала более дорогой курс действий. Любой код, который хочет использовать последний подход, был бы совершенно свободен в использовании:

public static void Main( [[params]] )
{
  var mainObject = new MainObject();
  mainObject.Main( [[params]] );
}

Возможно, есть некоторые потенциальные выгоды от того, чтобы система включала свой собственный статический метод, который выглядел примерно так:

public static void SysMain( [[params]] )
{
  using (Application app = new UserApp( [[params]] )) // UserApp derives from Application
  {
    app.Start(); // Virtual method
    app.AllowNext(); // Base method--see text
    app.Run(); // Abstract method
  }
}

где app.AllowNext() был методом координировать действия с другими экземплярами приложений, запущенными практически в одно и то же время, чтобы гарантировать, что повторные попытки запуска приложения в фоновом режиме будут иметь свои вызовы Start обрабатываться строго последовательно. Однако при отсутствии такой схемы координации очень мало пользы от необходимости требовать, чтобы структура создавала объект приложения перед ее запуском. Стоимость не будет огромной, но без какой-либо потенциальной опознаваемой выгоды не так много смысла принимать даже тривиальные затраты.

Ответ 5

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

Другими словами, статические функции существуют до создания экземпляра класса, поэтому статическая применяется к основной точке входа (основной метод).