C# delegate

我们习惯把数据或者对像作为参数传递给方法,比如: int i = int.Parse("99");

int i = int.Parse("99");

如果我们把方法作为参数传递给方法,这就需要用到委托了

namespace delegate_test_01
{
    class Program
    {
        //我们习惯把数据或者对像作为参数传递给方法,
        //比如:  int i = int.Parse("99");
        //如果我们把方法作为参数传递给方法,这就需要用到委托了
        public delegate void toSometing(int number);
        //C#中委托的参数和返回类型,都要和你要具体委托的方法要一致

        public static void PrintNum(int number) //预计要被传递的方法
        {
            Console.WriteLine($"PrintNumber:{number}");                      
        }
        
        public static void SquareFunction(int number) // print数字的平方
        {
            Console.WriteLine($"SquareFunction:{Math.Pow(number, 2)}");
        }
                
        public static void RadicalFunction(int number)// print数字开根号
        {
            Console.WriteLine($"RadicalFunction:{Math.Sqrt(number)}");
        }

        static void Main(string[] args)
        {
            //字面上理解委托,就像是A委托B去办一件事情一样
            // WriteSometing 请 PrintNumber 处理事情
            toSometing delegateTestA = new toSometing(PrintNum);//传统写法            
            
            delegateTestA += RadicalFunction;
            delegateTestA += PrintNum;
            delegateTestA += SquareFunction;
            delegateTestA(25);

            Console.WriteLine("====以下另一个委任====");
            toSometing b = PrintNum;     //语法糖
            b(88);

            Console.WriteLine("按任意键结束....");
            Console.ReadKey();  //可按任意键结束画面
        }
    }
}

结果
PrintNumber:25
RadicalFunction:5
PrintNumber:25
SquareFunction:625
====以下另一个委任====
PrintNumber:88
按任意键结束....


实际应用的情境 教学 引用高手文章
https://eric0806.blogspot.com/2015/01/dotnet-delegate-usage.html


delegate 多播委托
委托的多播(Multicasting of a Delegate)

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

//delegate int NumberChanger(int n);

namespace multicasting1
{
    //delegate int NumberChanger(int n);
    class Program
    {
        delegate int NumberChanger(int n);
        
        static int num = 10;

        public static int AddNum(int p)
        {
            num += p;
            return num;
        }

        public static int MultNum(int q)
        {
            num *= q;
            return num;
        }

        public static int getNum()
        {
            return num;
        }

        static void Main(string[] args)
        {
            NumberChanger nc; //nc=5
            NumberChanger nc1 = new NumberChanger(AddNum);  
            //宣告的委派 有一个int参数5 这参数会送进 AddNum 方法当参数使用 num = num+5; 10+5
            NumberChanger nc2 = new NumberChanger(MultNum);  
            //宣告的委派 有一个int参数5 这参数会送进 MultNum 方法当参数使用15*5

            nc = nc1;
            nc += nc2;

            nc(5);  
            //使用同一个参数5 委派串了两个方法 两个方法参数都是5
            //num的值随着方法 一直被更改值 一开始是num=10
            //进了第一个方法 num=15 进了第二个方法 num=75
            Console.WriteLine("Value of Num: {0}", getNum());
            Console.ReadKey();
        }
    }
}


<<:  变更管理(Change Management)

>>:  C# object sender

[区块链&DAPP介绍 Day16] Solidity 教学 - libraries

今天来介绍一个 Solidity 的另一个特别的东西 libraries。 下面来看看 librar...

Day 11:想要快速产出元件及范本,就用 Angular CLI 吧!(一)

快速产生 Angular 元件 要在 Angular 专案中快速产生元件,首先要先打开 VS Cod...

[Day 27] 永和美食纪录-DAY365美式咖啡轻食

前言 在连假结束的第一个上班上课日,总是特别让人没有动力出门。但笔者始终相信只要吃到一份好吃的早餐,...

Day20 - 物理模拟篇 - 弹力、引力与磁力IV - 成为Canvas Ninja ~ 理解2D渲染的精髓

磁力/引力模拟 弹力、磁力和引力其实本质上很接近。 之所以说相近,是因为他们都是一种长距离作用力。 ...

How Much Does It Actually Cost To Hire A Hacker?

[How to Hire a Hacker Near Me] ( https://hackeronr...