1委托基础知识点
1.1.1 命名方法委托
使用修饰符delegate来进行定义,与方法的定义相似。修饰符 delegate 返回类型 委托名(参数)
委托可以理解为将对应的方法交给他去执行,只取结果。
命名方法委托是在实例化委托的时候带上他的方法的具体名称才能完成实例化
1.1.2 多播委托
可以传入多个方法,委托一起进行执行。通过+或-进行添加或删除。可以添加同一个方法,删除时会从后往前删除。不会将多个一次性删除
1.1.3 匿名委托
就是将委托所调用的方法在创建委托实例的时候进行实行。属于不常见的委托
1.2 委托示例:
1.2.1 命名方法委托
public delegate void MyDelegate(int[] array);
private void button1_Click(object sender, EventArgs e)
{
MyDelegate my = new MyDelegate(text.ceshi);
MyDelegate my = new MyDelegate(new text().ceshi);//如果不是静态的,可以进行实例化来给方法
int[] array = { 5,1,6,9,7,};
my(array);
foreach (var item in array)
{
MessageBox.Show(item.ToString());
}
}
class text {
public static void ceshi(int[] array) {
Array.Sort(array);
}
}
1.2.2 多播委托
public delegate void MyDelegate();
private void button1_Click(object sender, EventArgs e)
{
MyDelegate my = new MyDelegate(text.ceshi);
my += text.ceshi2;
my += text.ceshi1;
my += text.ceshi2;
my -= text.ceshi2;
my(); //得出结果为1,3,2。Ceshi2添加了两次,然后后面进行了一个删除,该删除由后进先出的方法进行删除
}
class text {
public static void ceshi() {
MessageBox.Show("1");
}
public static void ceshi1()
{
MessageBox.Show("2");
}
public static void ceshi2()
{
MessageBox.Show("3");
}
}
1.2.3 匿名委托
public delegate void MyDelegate(double length, double width);
private void button1_Click(object sender, EventArgs e)
{
double length = 10;
double width = 5;
MyDelegate areaDelegate = delegate//在实例化委托的时候直接进行方法的定义
{
MessageBox.Show("长方形的面积为:" + length * width);
};//注意后面有冒号
areaDelegate(length, width);
}