下面是笔者总结的委托的三种写法,以供大家参考学习:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp1
{
//在这里申明了三个委托
public delegate void DelProcess1();
public delegate void DeleProcess2(string str);
public delegate string DeleProcess3(string str);
class Class16
{
static void Main(string args)
{
//在这里来使用委托
//方法一:
DelProcess1 del11 = delegate ()
{
};
DelProcess1 del12 = Test1;
DelProcess1 del13 = () =>
{
};
//方法二
DeleProcess2 del21 = delegate (string str)
{
};
DeleProcess2 del22 = Test2;
DeleProcess2 del23 = (name) =>
{
};
//方法三:
DeleProcess3 del31 = delegate (string str)
{
return "";
};
DeleProcess3 del32 = Test3;
DeleProcess3 del33 = (name) =>
{
return "";
};
}
static void Test1()
{
}
static void Test2(string str)
{
}
static string Test3(string str)
{
return "";
}
}
}
委托使用过程中的要点:
namespace ConsoleApp1
{
//定义一个委托
public delegate void DelSayHi(string name);
class 委托
{
static void Main(string args)
{
//作用:委托可以实现把一个函数当做是参数来传递
//Thread th = new Thread(Method); //委托类型
//List list = new List() { 1, 2, 3, 4 }; //移除list集合中大于2的所有元素
//list.RemoveAll(number => number > 2);
//如何通过SayHello,根据不同的name来实现不同的函数调用?
//【要点】函数可以赋值给一个委托对象,但是委托的签名必须跟函数的签名一致(也就是参数和返回值要一样哈)
DelSayHi del1 = SayHelloChinese;//new DelSayHi(SayHelloChinese); //这里我们把函数作为参数来传递
DelSayHi del2 = SayHelloEnglish; //new DelSayHi(SayHelloEnglish);
//通过这个委托可以把“战三” 这个字符串作为参数,传递给SayHelloChinese这个函数
del1("战三");
del2("王五");
//函数可以直接赋值给为委托(这里可以看做是多态)------大大提高了程序的扩展性
SayHello("ABCDEFGH", SayHelloChinese);
SayHello("ABCDEFGH", SayHelloEnglish);
/*
//这实际上就是一个函数, 但是这个函数没有名字, 只有返回值
delegate (string name)
{
Console.WriteLine("Hello haha " + name);
}
*/
//通过匿名函数来使用委托
SayHello("乌龟哦", delegate (string name)
{
Console.WriteLine("Hello haha " + name);
});
//拉姆达表达式
SayHello("王五", (name) =>
{
Console.WriteLine("Hello hahahahahah" + name);
});
Console.ReadKey();
}
static void Method(string name)
{
}
//通过委托来实现不同函数的调用(委托用于定义函数的类型)
// 可以把委托看做是-----》函数的父类
static void SayHello(string name, DelSayHi del)
{
//这里的del实际上就是委托类型
del(name);
}
//这里的name形参可以就是通过委托传递过来的参数
static void SayHelloChinese(string name)
{
Console.WriteLine("你好哈" + name);
}
static void SayHelloEnglish(string name)
{
Console.WriteLine("Hello" + name);
}
}
}
评论
填写昵称与邮箱即可评论,无需登录。