是否可以在C#中调用静态函数内的非静态函数?

时间:2009-06-27 16:07:56

标签: c# static

是否可以在C#中调用静态函数内使用公共非静态类的非静态函数?

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();
    }
}

嗯,上面的无效代码就是我需要的。

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

不是直接没有。您必须有一个Program实例才能调用非静态方法。例如

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

答案 1 :(得分:1)

要调用非静态函数,您需要拥有该函数所属类的实例,似乎需要重新考虑为什么需要静态函数来调用非静态函数。 也许你正在寻找Singleton模式?

或许您应该将非静态函数传递给新的Thread()

答案 2 :(得分: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();
    }
}

答案 3 :(得分:0)

没有

根据定义,非静态函数需要一个类实例。如果在静态函数中创建类的实例,或者在类中具有静态Instance属性,则可以通过该对象引用。

答案 4 :(得分:0)

如果myAnotherClass变量被声明为static,那么是的,您可以在其上调用方法。

这不是您提出的问题的答案,但它可以让您以您想要的方式调用该方法。