委托学习——2. 委托的声明(自定义委托)

知识点:

委托是一种类,类是数据类型,所以委托也是一种数据类型,证明如下:

 //如何证明委托是一种类
            Type type = typeof(Action);
            Console.WriteLine(type.IsClass);//结果为True


委托的声明方式与一般的类不同
注意声明委托的位置——避免写错地方结果声明成嵌套类型
委托与所封装的方法必须“类型兼容”,能不能封装方法由类型决定

 注释中也包括解释,上代码

using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace DelegateExample
{
    //因为委托是一种类,所以要声明在命名空间下,与下面的Program类同级
    public delegate double Calc(double x, double y);
    //public delegate double(目标方法的返回值类型) Calc(里面是目标方法的参数列表)
    //三个double称为类型约束

    class Program
    {
        static void Main(string[] args)
        {
            //委托是一种类,类是数据类型,所以委托也是一种数据类型
            //委托的声明方式与一般的类不同
            //注意声明委托的位置——避免写错地方结果声明成嵌套类型
            //委托与所封装的方法必须“类型兼容”,能不能封装方法由类型决定

            /*
             * 
            delegate double Calc(double x, double y);
                     double Add(double x, double y) { return x + y; }
                     double Sub(double x, double y) { return x - y; }
                     double Mul(double x, double y) { return x * y; }
                     double Div(double x, double y) { return x / y; }
            返回值的数据类型要一致
            参数列表在个数和数据类型上一致
            */

            //如何证明委托是一种类
            //Type type = typeof(Action);
            //Console.WriteLine(type.IsClass);//结果为True

            Calculator calculator = new Calculator();// 有了实例以后才能访问其变量与方法
            Calc calc1 = new Calc(calculator.Add);//创建委托的实例与变量
            Calc calc2 = new Calc(calculator.Sub);//创建委托的实例与变量
            Calc calc3 = new Calc(calculator.Mul);//创建委托的实例与变量
            Calc calc4 = new Calc(calculator.Div);//创建委托的实例与变量
            //委托的实例参数中传入的是方法,对这个传入的方法要求是有两个double参数

            double a = 100, b = 200, c = 0;

            //委托的间接调用
            c = calc1.Invoke(a, b);//实际上这个两个参数是传送给了对应的方法
            Console.WriteLine(c);
            c = calc2.Invoke(a, b);
            Console.WriteLine(c);
            c = calc3.Invoke(a, b);
            Console.WriteLine(c);
            c = calc4.Invoke(a, b);
            Console.WriteLine(c);

            //Invoke可以省略
            c = calc1(a, b);
            Console.WriteLine(c);
            c = calc2(a, b);
            Console.WriteLine(c);
            c = calc3(a, b);
            Console.WriteLine(c);
            c = calc4(a, b);
            Console.WriteLine(c);

            //以上是自定义委托的声明和使用

        }
    }


    class Calculator
    {
        public double Add(double x,double y)
        {
            return x + y;
        }

        public double Sub(double x, double y)
        {
            return x - y;
        }

        public double Mul(double x, double y)
        {
            return x * y;
        }

        public double Div(double x, double y)
        {
            return x / y;
        }
    }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值