我可以从c#中执行此操作:
public static void example()
{
nonstatic();
}
public void nonstatic()
{ }
如果有任何解决此问题的工作,请随意提供并谢谢
答案 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);
}