我可以从 c# 做到这一点:
public static void example()
{
nonstatic();
}
public void nonstatic()
{ }
如果有任何解决此问题的方法,请免费提供,谢谢
我可以从 c# 做到这一点:
public static void example()
{
nonstatic();
}
public void nonstatic()
{ }
如果有任何解决此问题的方法,请免费提供,谢谢
static
可以在该类的实例存在之前调用该类的成员。类的实例成员只能在该类的实例存在后调用,并且只能从实例本身调用。
一个快速的解决方法是创建一个您尝试调用的类型的新对象:
new SomeClass().nonstatic();
但你为什么要这样做?是让它运行吗?那么你就没有写出好的代码。您只是在屈服。尝试寻求更优雅的解决方案..或者:
或者,您可以问自己为什么您的方法是静态的。有必要吗?将其设为非静态或使用其他方法会不会很痛static
?您可以通过一些仔细的类设计来避免这些情况。
编辑完整性
static
通过该对象的实例而不是直接从静态方法调用此方法可能值得。这样,您就不需要毫无意义地创建新对象。这是因为类的实例可以访问所有实例方法和所有静态方法。
您需要做的就是创建一个类的实例并调用它的方法。
public class Someclass
{
public void Data1()
{
}
public static void Data2()
{
Someclass foo = new Someclass();
Someclass.Data1();
}
}
尝试使用单例模式,然后在您的对象实例上调用您的方法
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()
是的,你可以做到。
class Example
{
public static void example()
{
new Example().nonstatic();
}
public void nonstatic()
{
}
static void main(string[] args)
{
example();
}
}
根据您的示例,您最好使用此代码,
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);
}