我有以下代码,我想打电话data1()
给data2()
.这可能在C#中吗?如果是这样,怎么样?
private void data1()
{
}
private static void data2()
{
data1(); //generates error
}
Run Code Online (Sandbox Code Playgroud)
tva*_*son 109
您需要创建该类的实例并在其上调用该方法.
public class Foo
{
public void Data1()
{
}
public static void Data2()
{
Foo foo = new Foo();
foo.Data1();
}
}
Run Code Online (Sandbox Code Playgroud)
Kep*_*boy 27
也许您正在寻找的是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();
}
Run Code Online (Sandbox Code Playgroud)
您仍然需要创建类的实例,但确保只有一个实例.
Jim*_*m W 17
您必须在静态方法中创建该类的实例,然后调用它.
例如这样:
public class MyClass
{
private void data1()
{
}
private static void data2()
{
MyClass c = new MyClass();
c.data1();
}
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*don 10
如果不先创建父类的实例,则无法调用非静态方法.
因此,从静态方法,您必须实例化一个新对象...
Vehicle myCar = new Vehicle();
Run Code Online (Sandbox Code Playgroud)
...然后调用非静态方法.
myCar.Drive();
Run Code Online (Sandbox Code Playgroud)
小智 7
您只需要提供对象引用.请在职位上提供您的班级姓名.
private static void data2()
{
<classname> c1 = new <classname>();
c1. data1();
}
Run Code Online (Sandbox Code Playgroud)
很抱歉为非常旧的帖子发布答案,但我相信我的回答可能会帮助其他人。
在委托的帮助下,可以实现同样的事情。
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)