Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 委托可以用来调用类的方法而不实例化它吗?_C#_Delegates - Fatal编程技术网

C# 委托可以用来调用类的方法而不实例化它吗?

C# 委托可以用来调用类的方法而不实例化它吗?,c#,delegates,C#,Delegates,一位面试官问我,他上的课很重,有很多方法。 到目前为止,他只需要一种方法 他问我C#中的委托是否可以帮助我在不实例化类的情况下调用该方法 他说是的,代表们可以通过这种方式帮助我们 我用谷歌搜索了一下。我试着在我的VS上运行它,但是我想我需要初始化这个类 看看这个片段- public class HomeController : Controller { public ActionResult test() { NumberChanger

一位面试官问我,他上的课很重,有很多方法。 到目前为止,他只需要一种方法

他问我C#中的委托是否可以帮助我在不实例化类的情况下调用该方法

他说是的,代表们可以通过这种方式帮助我们

我用谷歌搜索了一下。我试着在我的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;
    }

}

如果需要使用非静态方法,可能应该使用新的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:没问题。我认为不可能做得比这更好。。。好的,您总是需要至少一个实例才能调用实例方法。