C# 委托可以用来调用类的方法而不实例化它吗?
一位面试官问我,他上的课很重,有很多方法。 到目前为止,他只需要一种方法 他问我C#中的委托是否可以帮助我在不实例化类的情况下调用该方法 他说是的,代表们可以通过这种方式帮助我们 我用谷歌搜索了一下。我试着在我的VS上运行它,但是我想我需要初始化这个类 看看这个片段-C# 委托可以用来调用类的方法而不实例化它吗?,c#,delegates,C#,Delegates,一位面试官问我,他上的课很重,有很多方法。 到目前为止,他只需要一种方法 他问我C#中的委托是否可以帮助我在不实例化类的情况下调用该方法 他说是的,代表们可以通过这种方式帮助我们 我用谷歌搜索了一下。我试着在我的VS上运行它,但是我想我需要初始化这个类 看看这个片段- public class HomeController : Controller { public ActionResult test() { NumberChanger
public class HomeController : Controller
{
public ActionResult test()
{
NumberChanger nc1 = new NumberChanger( /*what to do here!
can i call sum method of class abc*/);
return View();
}
}
public delegate int NumberChanger(int n, int m);
public class abc
{
int a;
int b;
public int sum(int a, int b) {
return a + b;
}
}
如果需要使用非静态方法,可能应该使用新的NumberChanger(new abc().sum)
试一试您总是需要至少一个实例来调用实例方法 但是,如果您想避免创建大量重对象,可以使用以下技巧:
class TestClass
{
private static TestClass DummyInstance;
public static Action GetShowAsDelegate()
{
DummyInstance = DummyInstance ?? new TestClass();
return (DummyInstance.Show);
}
public void Show()
{
Console.WriteLine("It works!");
}
}
class Program
{
static void Main(string[] args)
{
var show = TestClass.GetShowAsDelegate();
show();
}
}
您的类存储自身的私有静态实例,当调用方请求
Show()
的委托版本时,该实例将被实例化。然后,它使用该实例,因此您不需要每次都在外部创建一个实例。在第一次调用之后,任何人都可以通过获取委托来运行Show
方法,而无需再创建任何实例。谢谢@mangusta,但在这里,我们使用new来实例化类。如果该方法不是委托方法类的成员,我想是没有办法的:/@Lakshay:没问题。我认为不可能做得比这更好。。。好的,您总是需要至少一个实例才能调用实例方法。