1.委托最最最基本用法
1.首先应该知道什么是委托。一句话很抽象的话:我委托中介去买房。因为我不是特别会看房,所以要委托别人帮我。(委托其实是面向对象23种设计模式中的一种叫委托模式)看不懂没关系看代码
2.声明一个委托 注意:委托是和类同级别的。
(我这里声明了两个)
3.被委托的函数必须和委托标签一致;
委托 delegate int 委托名(int a, string b)
所委托的函数必须是 int 函数名(int a, string b) 这样形式的函数
namespace CSharpTest
{
//无参数无返回值的委托
public delegate void NoArgsDelegate();
//有返回值的委托
public delegate int HavrArgsDelegate();
}
3.我声明一个委托对象(中介)
NoArgsDelegate Say;//这样我就得到了一个名为Say的委托对象(通俗讲叫中介)
4.定义两个静态函数
public static void SayWang()
{
Console.WriteLine("汪汪");
}
public static void SayMiao()
{
Console.WriteLine("喵~~");
}
5.通过各种方式向委托对象添加函数并通过委托对象(中介)调用函数(仔细看)
#region delegate
//定义一个无参委托对象
//1.通过构造函数的方式向委托添加函数
//NoArgsDelegate Say = new NoArgsDelegate(SayWang);
//2.通赋值的方式为委托添加函数 只能添加静态函数
NoArgsDelegate Say = SayWang;
Say += SayMiao;
Console.WriteLine("-----添加函数后");
Say();
//3.通过-=删除委托中的函数
Console.WriteLine("-----删除一个函数后");
Say -= SayWang;
Say();
//4.委托添加匿名函数
Say += delegate ()
{
Console.WriteLine("我是匿名函数");
};
Console.WriteLine("-----添加匿名函数后");
Say();
//5.委托通过lambda表达式添加函数
Say += () =>
{
Console.WriteLine("我是lambda表达式");
};
Console.WriteLine("-----通过lambda表达式添加函数后");
Say();
#endregion
运行结果
2.带返回值委托的返回值测试
1.声明一个带返回值的委托对象并添加两个函数
HavrArgsDelegate havrArgs = GetNum1;
havrArgs += GetNum2;
Console.WriteLine(havrArgs());
//上面代码是构造函数里面的
public static int GetNum1()
{
return 1;
}
public static int GetNum2()
{
return 2;
}
运行结果
答案:带返回值的委托会返回最后一个被添加的函数的返回值
3. .net framework自带的两个委托
第一个:Action action; 无参数无返回值
第二个:Func<int,int,string> func; 泛型里面最后一个参数是返回值类型,前面的是参数列表中类型。