如何从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() { } }