我有以下的代码,我想在 data2()
中调用 data1()
。 在C#中可以吗? 如果是,应该怎么做?
private void data1()
{
}
private static void data2()
{
data1(); //generates error
}
我有以下的代码,我想在 data2()
中调用 data1()
。 在C#中可以吗? 如果是,应该怎么做?
private void data1()
{
}
private static void data2()
{
data1(); //generates error
}
您需要创建该类的一个实例并在其上调用该方法。
public class Foo
{
public void Data1()
{
}
public static void Data2()
{
Foo foo = new Foo();
foo.Data1();
}
}
也许您正在寻找的是单例模式(Singleton pattern)?
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();
}
您仍然需要创建类的一个实例,但您可以确保只有一个实例。
你需要在静态方法中创建该类的一个实例,然后调用它。
例如像这样:
public class MyClass
{
private void data1()
{
}
private static void data2()
{
MyClass c = new MyClass();
c.data1();
}
}
如果你想调用一个非静态方法,首先必须创建其父类的实例。
因此,在静态方法中,你需要实例化一个新的对象...
Vehicle myCar = new Vehicle();
...然后调用非静态方法。
myCar.Drive();
您只需要提供对象引用。请在位置中提供您的类名。
private static void data2()
{
<classname> c1 = new <classname>();
c1. data1();
}
对于非常老的帖子回答表示抱歉,但我相信我的答案可能有助于其他人。
通过使用委托(delegate)可以实现同样的事情。
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();
}
}
}
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();
}
}
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();
}
}
请问,我认为对您的问题的回答可能是:
public class <Classname> {
static method() {
(new <Classname>)->non-static();
}
non-static method(){ ...; }
~<Classname>(){...;}
};
当数据成员被声明为静态时,该类的所有对象只维护一个数据副本。静态成员具有或处理永久存储。
对于C++和可能的C#,当使用new运算符时,它会为类对象分配内存,内存分配后调用对象构造函数。因此,由于静态成员是在其所属类名之前调用的,与非静态成员相同,因此使用(new Classname)似乎像是调用具有预定义永久存储的成员,如静态数据成员。
希望这些细节能对您有所帮助。
静态方法不允许直接调用非静态方法。
原因:静态方法仅属于其类,而不属于任何对象或实例。
因此,当您尝试从同一类中的静态方法访问任何非静态方法时,您将收到:
"需要对象引用才能访问非静态字段、方法或属性"。
解决方案:只需声明一个引用,如下所示:
public class <classname>
{
static method()
{
new <classname>.non-static();
}
non-static method()
{
}
}