可参考:b站搜索C#0基础入门精解:13 C#委托" up主:渥瑞达北美IT培训
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @delegate
{
class MainClass
{
/*委托的注意事项:
能够被委托包装的方法必须满足以下两个条件:
1.方法的参数列表(参数个数和类型)要与委托的参数列表一致
2.方法的返回类型要于委托的返回类型一致
*/
/*委托使得代码得以复用;便于维护和扩展*/
//定义委托
public delegate void MyDelegate(string name, string language);
static void Main(string[] args)
{
(方法一)
声明委托变量
//MyDelegate del;
实例化委托变量
//del = new MyDelegate(new MainClass().Greeting);
传递委托变量
//MainClass.MyDelegateMethod(del);
//(方法二)
//实例化委托变量
//MainClass.MyDelegateMethod(new MainClass().Greeting);
Greet greet = new Greet();
Greet.Greeting("张三", greet.ChineseGreeting);
Greet.Greeting("tom", greet.EnglishGreeting);
}
//public static void MyDelegateMethod(MyDelegate del)
//{
// //调用委托
// del("张三", "chn");
//}
public void ChineseGreeting(string name)
{
Console.WriteLine("你好" + name);
}
public void EnglishGreeting(string name)
{
Console.WriteLine("hello" + name);
}
}
public class Greet
{
public delegate void GreetDelegate(string name);
public static void Greeting(string name,GreetDelegate gd)
{
gd(name);
}
public void ChineseGreeting(string name)
{
Console.WriteLine("你好" + name);
}
public void EnglishGreeting(string name)
{
Console.WriteLine("hello" + name);
}
}
}
/*心得:
delegate就是相当于函数的指针
代码中出现与delegate相关的部分都当做函数的名字去反向追踪,就能看懂代码
*/