1、委托就是一个对象,它知道如何调用一个方法
2、delegate 委托类型和委托实例
委托类型定义了委托实例可以调用的那类方法,具体来说,委托类型定义了方法的返回类型和参数
delegate int Transformer(int x); //委托类型定义,定义了形参和返回值
3、委托实例
把方法赋值给委托变量的时候就创建了委托实例
Transformer t = Square;
调用:
int answer = t(3);
4、完整的例子
namespace Demo
{
public class Program
{
delegate int Transformer(int x);
static int Square(int x) => x * x;
static void Main()
{
//创建了委托实例
Transformer t = Square;
//Transformer t = new TransFormer(Square);
int result = t(3); //t(3)委托实例调用委托方法
//int result = t.Invoke(3);
Console.WriteLine(result);
}
}
static int Square (int x) => x*x;
}
再来个完整的例子!!!
namespace WinFormTestExample
{
public delegate void GreetingDelegate(string name);
public class GreetingManager {
public GreetingDelegate delegate1;
//注意此方法,它能接受一个GreetingDelegate类型的方法作为参数
public void GreetPeople(string name)
{
if (delegate1 !=null) //如果有方法注册委托变量
{
delegate1(name); //这个方法是根据即将被调用的方法决定的,比如EnglishGreeting和ChineseGreeting
}
}
}
class Program
{
private static void EnglishGreeting(string name)
{
Console.WriteLine("Moring," + name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好," + name);
}
static void Main(string[] args)
{
GreetingManager gm = new GreetingManager();
gm.delegate1 = EnglishGreeting;
gm.delegate1 += ChineseGreeting;
gm.GreetPeople("Jimmy Zhang"); //注意,这次不需要再传递 delegate1变量
Console.ReadKey();
}
}
}