我有以下代码,我想从data1()
致电data2()
。这可能在C#中吗?如果是这样,怎么样?
private void data1()
{
}
private static void data2()
{
data1(); //generates error
}
答案 0 :(得分:104)
您需要创建该类的实例并在其上调用该方法。
public class Foo
{
public void Data1()
{
}
public static void Data2()
{
Foo foo = new Foo();
foo.Data1();
}
}
答案 1 :(得分:26)
也许您正在寻找的是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();
}
您仍然需要创建该类的实例,但确保只有 一个实例。
答案 2 :(得分:17)
您必须在静态方法中创建该类的实例,然后调用它。
例如:
public class MyClass
{
private void data1()
{
}
private static void data2()
{
MyClass c = new MyClass();
c.data1();
}
}
答案 3 :(得分:10)
如果没有先创建父类的实例,则无法调用非静态方法。
因此,从静态方法开始,您必须实例化一个新对象......
Vehicle myCar = new Vehicle();
...然后调用非静态方法。
myCar.Drive();
答案 4 :(得分:6)
您只需提供对象引用即可。请在职位上提供您的班级名称。
private static void data2()
{
<classname> c1 = new <classname>();
c1. data1();
}
答案 5 :(得分:3)
为非常老的帖子发表回复道歉,但我相信我的回答可能有助于其他人。
在代表的帮助下,可以实现同样的目标。
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();
}
}
}
答案 6 :(得分:0)
假设data1()
和data2()
都在同一个类中,那么另一个选择是使data1()
成为静态。
private static void data1()
{
}
private static void data2()
{
data1();
}
答案 7 :(得分:0)
new Foo();
Foo.StaticMethod();
class Foo
{
private static Foo foo;
public Foo()
{
foo = this;
}
private void PrintHello()
{
Console.WriteLine("Hello");
}
public static void StaticMethod()
{
foo.PrintHello();
}
}
答案 8 :(得分:-1)
静态方法永远不允许直接调用非静态方法。
原因:静态方法仅属于其类,并且属于nay对象或任何实例。
因此,每当您尝试从同一类中的静态方法访问任何非静态方法时:您将收到:
&#34;非静态字段,方法或属性需要对象引用&#34;。
解决方案:只需声明一个引用,如:
public class <classname>
{
static method()
{
new <classname>.non-static();
}
non-static method()
{
}
}
答案 9 :(得分:-1)
你可以像这样使用call方法:Foo.Data2()
public class Foo
{
private static Foo _Instance;
private Foo()
{
}
public static Foo GetInstance()
{
if (_Instance == null)
_Instance = new Foo();
return _Instance;
}
protected void Data1()
{
}
public static void Data2()
{
GetInstance().Data1();
}
}