C# Delegate浅析

委托本质是一个类,只不过带的参数换为指定函数。网上有很多教程谈及delegate的声明,实例化等等,这里浅谈我的理解。

例如下面是一个控制台程序,声明delegate可以在命名空间下,也可以在class下,因为delegate本质是一个类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateDemo
{
    //delegate double Mydelegate(double num1, double num2);

    class Program
    {
        delegate double Mydelegate(double num1, double num2);
        static void Main(string[] args)
        {
            //同一Project
            TestClass testClass = new TestClass();
            Mydelegate delegate1 = testClass.Plus;
            Console.WriteLine(delegate1(1.5, 5.5));

            //不同Project
            //TestOutProject.TestOutClass testOutProject = new TestOutProject.TestOutClass();
            //Mydelegate delegate2 = testOutProject.Multipiy;
            //Console.WriteLine(delegate2(1.5,5.5));
            Console.ReadKey();
        }
    }
}

同一项目内创建TestClass类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateDemo
{
    class TestClass
    {
        public double Plus(double num1 ,double num2)
        {
            return num1 + num2;
        }
    }
}

运行后的结果:

以上在任何关于delegate的教程中都应该可以看到!


接下来关键:创建新项目TestOutProject,在该项目下创建类TestOutClass,并创建相应的函数,如下:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestOutProject
{
    public class TestOutClass
    {
        public double Multipiy(double num1, double num2)
        {
            return num1 * num2;
        }
    }
}
将该项目引入控制台

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateDemo
{
    //delegate double Mydelegate(double num1, double num2);

    class Program
    {
        delegate double Mydelegate(double num1, double num2);
        static void Main(string[] args)
        {
            //同一Project
            //TestClass testClass = new TestClass();
            //Mydelegate delegate1 = testClass.Plus;
            //Console.WriteLine(delegate1(1.5, 5.5));

            //不同Project
            TestOutProject.TestOutClass testOutProject = new TestOutProject.TestOutClass();
            Mydelegate delegate2 = testOutProject.Multipiy;
            Console.WriteLine(delegate2(1.5, 5.5));
            Console.ReadKey();
        }
    }
}

运行:

没有问题!

我觉得例中delegate方法的最为关键就是这两段代码:

Mydelegate delegate1 = testClass.Plus;

Mydelegate delegate2 = testOutProject.Multipiy;

(PS:指定函数的签名和delegate的签名一致,这是必要的!!!

此时,再回首开头说的“只不过带的参数换为指定函数”,也就是说delegate可以完成跨项目的相关函数、参数的引用等等,至此完成闭环!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值