почему в С#, консольном приложении, в классе "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 он должен быть статическим, поскольку он является точкой входа вашего приложения, и никто не собирается создавать экземпляр и называть его.
Итак, технически правильные ответы выше:)
Я должен указать, что обычно вы не хотите идти в направлении всех статических методов. Создайте объект, например, форму окна, контроллер для него и перейдите к объектно-ориентированному коду вместо этого на процедурный.