Можно ли вызывать нестатическую функцию внутри статической функции в C #?

2

Можно ли вызвать нестационарную функцию, которая использует открытый нестатический класс внутри статической функции в С#?

public class MyProgram
{
    private Thread thd = new Thread(myStaticFunction);
    public AnotherClass myAnotherClass = new AnotherClass();

    public MyProgram()
    {
        thd.Start();
    }

    public static void myStaticFunction()
    {
        myNonStaticFunction();
    }

    private void myNonStaticFunction()
    {
        myAnotherClass.DoSomethingGood();
    }
}

Ну, неверный код, как указано выше, мне нужен.

Любая идея?

Теги:
static

5 ответов

1
Лучший ответ

Похоже, вы хотите передать данные в свой поток. Попробуйте следующее:

public class MyProgram
{
    private Thread thd;
    public AnotherClass myAnotherClass = new AnotherClass();

    public MyProgram()
    {
        thd = new Thread(() => myStaticFunction(this));
        thd.Start();
    }

    public static void myStaticFunction(MyProgram instance)
    {
        instance.myNonStaticFunction();
    }

    private void myNonStaticFunction()
    {
        myAnotherClass.DoSomethingGood();
    }
}
  • 0
    Большое спасибо! Ты спас мой день
3

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

public static void MyStaticFunc(Program p) {
  p.myNonStaticFunction();
}
1

Для вызова нестатической функции вам нужно иметь экземпляр класса, к которому принадлежит функция, похоже, вам нужно переосмыслить, почему вам нужна статическая функция для вызова нестатического. Возможно, вы ищете Singleton pattern?

Или, может быть, вам просто нужно передать нестационарную функцию в новую тему()

0

Нет.

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

0

Если переменная myAnotherClass объявлена ​​как статическая, то да, вы можете вызывать на ней методы.

Это не совсем ответ на заданный вами вопрос, но он позволит вам вызвать метод так, как вы хотите.

Ещё вопросы

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