委托
定义
委托类型是怎么声明出来的?
委托是类类型,是引用类型的一种。
using System;
using System.Collections.Generic;
namespace Combine
{
class Program
{
static void Main(string[] args)
{
// MyDele dele1 = new MyDele(M1());
// 此处MyDele(M1)中M1后不加(),是由于是添加M1函数而不是调用M1函数、
// dele1这个变量引用着一个MyDele类型的实例,该实例“包裹”着M1方法
MyDele dele1 = new MyDele(M1);
// 可以包裹多个函数,这样的委托也称为多播委托
dele1 += M1;
Student stu = new Student();
dele1 += stu.SayHello;
// 等同于
// dele1 += (new Student()).SayHello;
dele1.Invoke();
dele1();
// 实际操作中,大部分使用的是委托变量当做函数调用而不是使用.Invoke();
}
static void M1()
{
Console.WriteLine("M1 is called!");
}
}
class Student
{
public void SayHello()
{
Console.WriteLine("Hello,I'm a student!");
}
}
delegate void MyDele();
}
//包裹(引用)只是一种形容,约束是指委托对包裹着的方法的限制
using System;
using System.Collections.Generic;
namespace Combine
{
class Program
{
static void Main(string[] args)
{
// 当委托中函数不符合签名时,如下示例解决方法
// 1.添加一个成员函数
// 2.函数满足两个成员变脸
MyDele dele1 = new MyDele(Program.Add);
int res = dele1(100,200);
Console.WriteLine(res);
}
static int Add(int a, int b)
{
return a + b;
}
}
delegate int MyDele(int a,int b);
}