почему в С#, консольном приложении, в классе "program", который по умолчанию, все методы должны быть статическими вместе с
static void Main(string[] args)
почему в С#, консольном приложении, в классе "program", который по умолчанию, все методы должны быть статическими вместе с
static void Main(string[] args)
Функции-члены не обязательно должны быть статическими; но если они не являются статическими, для этого требуется создать экземпляр объекта Program
для вызова метода-члена.
Со статическими методами:
public class Program
{
public static void Main()
{
System.Console.WriteLine(Program.Foo());
}
public static string Foo()
{
return "Foo";
}
}
Без статических методов (другими словами, требуется создать экземпляр Program
):
public class Program
{
public static void Main()
{
System.Console.WriteLine(new Program().Foo());
}
public string Foo() // notice this is NOT static anymore
{
return "Foo";
}
}
Main
должен быть статичным, поскольку в противном случае вам нужно было бы сообщить компилятору, как создать экземпляр класса Program
, который может быть или не быть тривиальной задачей.
Вы также можете писать нестатические методы, просто вы должны использовать это как
static void Main(string[] args)
{
Program p = new Program();
p.NonStaticMethod();
}
Единственным требованием для приложения С# является то, что исполняемый узел должен иметь один статический основной метод в любом классе сборки!
Основной метод является статическим, поскольку он указывает на ввод кода в сборку. Вначале нет экземпляра какого-либо объекта, только шаблон шаблона, загружаемый в память, и его статические элементы, включая статический метод главной точки входа. Main является предопределенным компилятором С# для точки входа.
Статический метод может вызывать только другие статические методы (если только нет дескриптора экземпляра чего-то, скомпонованного для использования). Вот почему метод Main вызывает другие статические методы и почему вы получаете ошибку компиляции, если пытаетесь вызвать нестатический (экземпляр) метод.
Однако, если вы создаете экземпляр любого класса, даже самого класса программы, то вы начинаете создавать объекты в своем приложении в области кучи памяти. Затем вы можете вызвать их экземпляры.
Не все методы должны быть статичными, вы можете добавлять методы экземпляра, а также создавать экземпляр своего класса программы.
Но для Main он должен быть статическим, поскольку он является точкой входа вашего приложения, и никто не собирается создавать экземпляр и называть его.
Итак, технически правильные ответы выше:)
Я должен указать, что обычно вы не хотите идти в направлении всех статических методов. Создайте объект, например, форму окна, контроллер для него и перейдите к объектно-ориентированному коду вместо этого на процедурный.