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

С#: консольное приложение - статические методы

почему в С#, консольном приложении, в классе "program", который по умолчанию, все методы должны быть статическими вместе с

static void Main(string[] args)
4b9b3361

Ответ 1

Функции-члены не обязательно должны быть статическими; но если они не являются статическими, для этого требуется создать экземпляр объекта 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, который может быть или не быть тривиальной задачей.

Ответ 2

Вы также можете писать нестатические методы, просто вы должны использовать это как

static void Main(string[] args)
{
    Program p = new Program();
    p.NonStaticMethod();
}

Единственным требованием для приложения С# является то, что исполняемый узел должен иметь один статический основной метод в любом классе сборки!

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

Итак, технически правильные ответы выше:)

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