如何从C#中的静态方法调用非静态方法?

我有以下代码,我想从data2()调用data1() data2() 。 这在C#中可能吗? 如果是这样,怎么样?

 private void data1() { } private static void data2() { data1(); //generates error } 

你需要创build一个类的实例并调用它的方法。

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

也许你正在寻找的是Singleton模式?

 public class Singleton { private Singleton() {} public void DoWork() { // do something } // You can call this static method which calls the singleton instance method. public static void DoSomeWork() { Instance.DoWork(); } public static Singleton Instance { get { return instance; } } private static Singleton instance = new Singleton(); } 

你仍然需要创build一个类的实例,但是你确保只有一个实例。

您必须在静态方法中创build该类的实例,然后调用它。

比如像这样:

 public class MyClass { private void data1() { } private static void data2() { MyClass c = new MyClass(); c.data1(); } } 

没有首先创build其父类的实例,就不能调用非静态方法。

所以从静态方法,你将不得不实例化一个新的对象…

 Vehicle myCar = new Vehicle(); 

…然后调用非静态方法。

 myCar.Drive(); 

你只需要提供对象引用。 请提供您的职位名称。

 private static void data2() { <classname> c1 = new <classname>(); c1. data1(); } 

道歉回答非常老的post,但我相信我的答案可能有助于其他。

在委托的帮助下可以实现同样的事情。

 public class MyClass { private static Action NonStaticDelegate; public void NonStaticMethod() { Console.WriteLine("Non-Static!"); } public static void CaptureDelegate() { MyClass temp = new MyClass(); MyClass.NonStaticDelegate = new Action(temp.NonStaticMethod); } public static void RunNonStaticMethod() { if (MyClass.NonStaticDelegate != null) { // This will run the non-static method. // Note that you still needed to create an instance beforehand MyClass.NonStaticDelegate(); } } } 

假设data1()data2()都在同一个类中,那么另一种方法是使data1()静态的。

 private static void data1() { } private static void data2() { data1(); } 

静态方法从不允许直接调用非静态方法。

原因:静态方法只属于它的类,不支持对象或任何实例。

因此,无论何时您尝试从同一个类中的静态方法访问任何非静态方法:您将收到:

“非静态字段,方法或属性需要对象引用”。

解决scheme:只需声明一个参考,如:

 public class <classname> { static method() { new <classname>.non-static(); } non-static method() { } }