Вызов функций в методе Main

1

Почему запуск этого кода С# показывает ошибку в F1(); в Майн?

namespace Project1
{
    public partial class Program1
    {       
        private void F1()
        {
            Console.WriteLine("F2");
        }

        private void F2()
        {
            Console.WriteLine("F1");
        }

        static void Main(string[] args)
        {
            F1();
        }
    }
}

Это консольное приложение. Он работает, если я определяю объект класса Program1. Но когда я пробую это в приложении Windows Form, я могу поставить F1(); в событии button_click и выполняется без ошибок без определения объекта Class Form1?

  • 2
    Вы забыли пометить ваши методы F1 () и F2 () как статические! Сделайте так, чтобы это читалось как: private static void F1 () ...
  • 1
    Я заметил, что вы перевернули записываемые строки - ваша функция F1 выдает «F2».
Теги:
call
function

2 ответа

3

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

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

2

Ниже приведены две альтернативы:

namespace Project1
{
public partial class Program1
{       
    private void F1()
    {
        Console.WriteLine("F1");
    }

    private void F2()
    {
        Console.WriteLine("F2");
    }

    static void Main(string[] args)
    {
        var program1 = new Program1();
        program1.F1();
    }
}
}

ИЛИ...

namespace Project1
{
public partial class Program1
{       
    static private void F1()
    {
        Console.WriteLine("F1");
    }

    static private void F2()
    {
        Console.WriteLine("F2");
    }

    static void Main(string[] args)
    {
        F1();
    }
}
}

BTW, я изменил ваш текст WriteLine, чтобы отразить вызываемую функцию.

  • 0
    Спасибо за ваш ответ, но почему эти методы без статической работы, когда я помещаю их в "приложение формы Windows"? Я могу вызвать их, например, в событии нажатия кнопки, чтобы они не были объявлены как статические?
  • 0
    Program1 является частичным классом - это означает, что есть некоторый другой файл, который содержит другой набор функций, которые являются частью этого класса Program1. Если функция события, нажатой кнопкой, является частью вашего класса Program1 (возможно, в другом файле), и она не является статической, то она может вызывать нестатические функции внутри класса.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню