从静态函数调用非静态函数

时间:2013-09-03 10:42:18

标签: c#

我可以从c#中执行此操作:

public static void example()
{
    nonstatic();
}

public void nonstatic()
{ }

如果有任何解决此问题的工作,请随意提供并谢谢

5 个答案:

答案 0 :(得分:4)

static类的成员可以在之前调用该类的实例。 只有在该类的实例存在之后,类的实例成员才能被称为,并且只能从实例本身调用。

快速解决方法就是创建一个你想要调用的类型的新对象:

new SomeClass().nonstatic();

为什么你在做什么?它是否让它运行?那你就不是在编写好的代码。你只是放弃了。试着寻求更优雅的解决方案......或者:

或者,你可以问自己为什么你的方法是静态的。它需要吗?将其设为非静态或制作其他方法static会不会有害?你可以通过一些仔细的课程设计来避免这些情况。

编辑完整性

可能值得通过该对象的实例调用此static方法,而不是直接从静态方法调用。这样,您就不需要毫无意义地创建新对象。这是因为类的实例可以访问所有实例方法和所有静态方法。

答案 1 :(得分:1)

您需要做的就是创建类的实例并在其上调用方法。

public class Someclass
{

public void Data1()
{
}

public static void Data2()
{
     Someclass foo = new Someclass();
     Someclass.Data1();
}

}

答案 2 :(得分:1)

尝试使用Singleton模式,然后在Your对象的实例上调用您的方法

using System;

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

然后

Singleton.Instance.MyNonstaticMethod()

答案 3 :(得分:0)

是的,你可以做到。

class Example
{
    public static void example()
    {
        new Example().nonstatic();
    }
    public void nonstatic()
    {
    }
    static void main(string[] args)
    {
        example();
    }
}

答案 4 :(得分:0)

根据您的示例,您最好使用此代码,

public static void example()
{
    static();
}

public static void static()
{
}

现在,如果有某些原因你需要一个非静态成员,即某个州,你可以实现两个成员。

public static void static(SomeState someState)
{
    // Do something thread safe with someState.
}

public void nonstatic()
{
    static(this.someState);
}