一位采访者问我,他有一个沉重的班级,有很多方法。 到目前为止,他只需要一种方法。
他问我C#中的Delegates是否可以帮助我调用该方法而不实例化该类?
他说是的,代表们可以这样帮助我们。
我用Google搜索了一下。我尝试在我的VS上运行它,但我想我需要初始化该类。看看这个片段 -
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;
}
}
答案 0 :(得分:0)
如果你需要使用非静态方法,可能你应该使用新的NumberChanger(新的abc()。sum)
试一试
答案 1 :(得分:0)
您总是需要至少一个实例来调用实例方法。
但是如果你想避免创建大量重物,你可以使用这样的技巧:
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
方法,而无需再创建任何实例。