是否可以在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();
}
}
嗯,上面的无效代码就是我需要的。
有什么想法吗?
答案 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,那么是的,您可以在其上调用方法。
这不是您提出的问题的答案,但它可以让您以您想要的方式调用该方法。