-3

我可以从 c# 做到这一点:

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

public void nonstatic()
{ }

如果有任何解决此问题的方法,请免费提供,谢谢

4

5 回答 5

4

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

一个快速的解决方法是创建一个您尝试调用的类型的新对象:

new SomeClass().nonstatic();

但你为什么要这样做?是让它运行吗?那么你就没有写出好的代码。您只是在屈服。尝试寻求更优雅的解决方案..或者:

或者,您可以问自己为什么您的方法是静态的。有必要吗?将其设为非静态或使用其他方法会不会很痛static?您可以通过一些仔细的类设计来避免这些情况。

编辑完整性

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

于 2013-09-03T10:44:56.503 回答
1

您需要做的就是创建一个类的实例并调用它的方法。

public class Someclass
{

public void Data1()
{
}

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

}
于 2013-09-03T10:46:14.720 回答
1

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

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()
于 2013-09-03T10:46:16.223 回答
0

是的,你可以做到。

class Example
{
    public static void example()
    {
        new Example().nonstatic();
    }
    public void nonstatic()
    {
    }
    static void main(string[] args)
    {
        example();
    }
}
于 2013-09-03T10:51:59.253 回答
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);
}
于 2013-09-03T11:02:34.450 回答