Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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_Console Application - Fatal编程技术网

C# 代表的目的是什么?他们的优势是什么?

C# 代表的目的是什么?他们的优势是什么?,c#,delegates,console-application,C#,Delegates,Console Application,有谁能向我解释一下为什么我们需要代表以及他们的优势是什么 下面是我使用普通方法创建的一个简单程序,有委托和没有委托: 有无代表的计划: 与代表一起参加的计划: 两个程序给出相同的结果,那么使用代理有什么好处呢 谢谢。委托旨在以创建更解耦的源代码的方式进行编程 通过委托,我们可以创建订阅服务器可以注册以接收来自发布服务器的事件的地方 我们通常看到代理被用作事件处理程序。例如,对于委托,我们可以通过在发生事件时调度事件来创建可重用控件。例如:单击事件,…,在这种情况下,控件是发布者,任何有兴趣处理此

有谁能向我解释一下为什么我们需要代表以及他们的优势是什么

下面是我使用普通方法创建的一个简单程序,有委托和没有委托:

有无代表的计划:

与代表一起参加的计划:

两个程序给出相同的结果,那么使用代理有什么好处呢


谢谢。

委托旨在以创建更解耦的源代码的方式进行编程

通过委托,我们可以创建订阅服务器可以注册以接收来自发布服务器的事件的地方

我们通常看到代理被用作事件处理程序。例如,对于委托,我们可以通过在发生事件时调度事件来创建可重用控件。例如:单击事件,…,在这种情况下,控件是发布者,任何有兴趣处理此事件的代码订阅方都将向控件注册处理程序

这是代表们的主要好处之一


@LzyPanda在这篇文章中指出了更多的用法:

这不应该是类似的问题,我试图理解代理,但我无法理解为什么我们需要,这就是为什么我在这里创建了一个线程。@King_Fisher链接的答案提供了很多示例,说明了如何处理代理。你读过吗?
namespace Delegates
{
    class Program
    {
        static void Main(string[] args)
        {
            abc obj = new abc();

            int a = obj.ss1(1, 2);
            int b = obj.ss(3,4);

            Console.WriteLine("the result of ss is {0} and the result of ss1 is {1}", a, b);

            Console.ReadKey();
        }
    }

    class abc
    {
        public int ss(int i, int j)
        {
            return i * j;
        }

        public int ss1(int x, int y)
        {
            return x + y;
        }
    }
}
namespace Delegates
{
    public delegate int my_delegate(int a, int b);

    class Program
    {    
        static void Main(string[] args)
        {
            my_delegate del = new my_delegate(abc.ss);    
            abc obj = new abc();

            my_delegate del1 = new my_delegate(obj.ss1);

            int a = del(4, 2);    
            int b = del1(4, 2);

            Console.WriteLine("the result of ss is {0} and the result of ss1 is {1}", a, b);
            Console.ReadKey();    
        }    
    }

    class abc
    {    
        public int ss(int i, int j)
        {    
            return i * j;    
        }

        public int ss1(int x, int y)
        {    
            return x + y;    
        }    
    }    
}