从静态方法c#调用非静态方法
本文关键字:静态方法 调用 | 更新日期: 2023-09-27 18:02:10
可能重复:
从静态方法c#调用非静态方法
我们可以从创建实例的静态方法调用非静态方法。代码:
public class Foo
{
public void Data1()
{
}
public static void Data2()
{
Foo foo = new Foo();
foo.Data1();
}
}
然而,我听说可以在委托的帮助下从静态方法调用非静态方法。这是真的吗?如果是,那么怎么做?请用示例代码指导我。谢谢
这是一个通过委托调用非静态方法的方法。请注意,这是一个分两步的过程,因为要调用非静态方法,您绝对需要该类的一个实例。我还要注意的是,几乎可以肯定有一种更好的方法来做你想做的事情,因为需要从静态方法调用非静态方法,尽管不想使用对象实例,这听起来像是非静态方法应该是静态的。
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();
}
}
}
要调用一个非静态方法,您需要一个对象的实例——这是无法解决的。
是的,您可以使用委托从任何地方调用非静态方法,但您需要该类的实例来创建委托,以便在调用该方法时该实例可用。
您总是需要一个实例来调用实例方法。可以有一个指向实例上某个方法的委托,但您仍然有一个正在调用中使用的实例,只是间接的。
您可以做其他聪明的事情,但现实是,在这一过程中,您必须在某个地方创建或访问非静态对象的实例。您可以将delgate传递到方法中,它引用方法的实例(更确切地说,是非静态对象实例上的方法(,但必须在代码之外创建。
在提供的代码中,您没有在静态方法中调用非静态方法,而是调用另一个类的实例公共方法,这是不同的情况。
所以在你的情况下,我建议写一些类似的东西:
静态空数据2(Foo-Foo(。
谨致问候。
通过这种方式,它可以从静态方法中被称为非静态方法。要从静态方法调用非静态方法,必须创建非静态方法所在类的新引用。因此,您的Data1方法在Foo类中,您必须创建一个新的reference(Foo-Foo=new Foo(((才能退出静态方法。