是否可以在C#中调用静态函数内的非静态函数?
是否可以在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(); } }
好吧,上面的无效代码就是我需要的。
任何的想法?
听起来你想将数据传递给你的线程。 试试这个:
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(); } }
不是直接没有。 您必须具有Program的实例才能调用非静态方法。 例如
public static void MyStaticFunc(Program p) { p.myNonStaticFunction(); }
要调用非静态函数,您需要拥有函数所属类的实例,似乎需要重新考虑为什么需要静态函数来调用非静态函数。 也许你正在寻找Singleton模式?
或许你应该只将一个非静态函数传递给新的Thread()
没有。
根据定义,非静态函数需要一个类实例。 如果在静态函数中创建类的实例,或者在类中具有静态Instance属性,则可以通过该对象引用。
如果myAnotherClass变量声明为static,则是,您可以在其上调用方法。
这不是你提出的问题的答案,但它允许你以你想要的方式调用方法。