委托
委托實際為一種 中間人 秀撇,A需要C去做某件事情 而由B去調(diào)用C來做事。
1.委托是一種類型向族,它可以聲明在類的外部呵燕,也可以在類內(nèi)部聲明。
public delegate void NoParaNoRenturnOutClass();//類外部委托
class MyDelegate
{
public delegate void NoParaNoReturn();//類內(nèi)部委托
}
2.委托對應方法件相,需要與綁定的方法有 相同數(shù)量 夜矗、相同類型 紊撕、相同返回值 才能綁定柠傍。
- 如此 是一個 無參數(shù) 無返回值 委托和方法綁定
public delegate void NoParaNoReturn(); //無參數(shù) 無返回值
class MyDelegate {
private static void ShowSomething() //無參數(shù)無返回值的方法
{
Console.WriteLine("這里是SonmeThing");
}
public static void Show()
{
NoParaNoReturn method = new NoParaNoReturn(ShowSomething);//委托的實例化
method.Invoke();//委托實例調(diào)用
}
}
- 如此 是一個 有參數(shù) 無返回值 委托和方法綁定
public delegate void WhitParaNoReturn(string name); //有參數(shù)無返回值的委托
class MyDelegate {
private static void ShowAnything(string a)
{
Console.WriteLine("這里是Anything:{0}",a);
}
public static void Show()
{
WhitParaNoReturn method2 = new WhitParaNoReturn(ShowAnything); //方法綁定
method2("黑"); //調(diào)用委托
}
}
public delegate int WithParaWithReturn(int a);有參數(shù) 有返回值
class MyDelegate {
private static int Showthing(int a)
{
Console.WriteLine("這里是Anything:{0}", a);
return a;
}
public static void Show()
{
WithParaWithReturn method2 = new WithParaWithReturn(Showthing); //方法綁定
Console.WriteLine(method2(200)); //調(diào)用委托 將會返回得到 200
}
}
多播委托
- 如下 最終的返回值僅為 return 出的 100
public delegate int WithParaWithReturn(int a);有參數(shù) 有返回值
class MyDelegate {
private static int ShowGetthing()
{
Console.WriteLine("展示");
return 100;
}
public static void Show()
{
//多播委托 最終值為單一值 100
NoParaWhitReturn noParaWhitReturn = new NoParaWhitReturn(ShowGetthing);
noParaWhitReturn += ShowGetthing;
noParaWhitReturn += ShowGetthing;
noParaWhitReturn += ShowGetthing;
Console.WriteLine(noParaWhitReturn());
}
}
自帶委托 Action
- Action 為C#自帶的委托類型 無需另外聲明委托惧笛,可 直接創(chuàng)建一個委托實例
- Action 為無返回值的委托類型
class MyDelegate {
private static void ShowSomething() //無參數(shù)無返回值的方法
{
Console.WriteLine("這里是SonmeThing");
}
public static void Show()
{
Action action1 = new Action(ShowSomething);
action1();//委托實例調(diào)用 無參數(shù) 無返回值
Action<string> action2 = new Action<string>(ShowAnything);
action2("王"); // 有參數(shù) 無返回值 此時參數(shù)類型必須標明在聲明委托中
}
}
自帶委托Func
- Func 為C#自帶的委托類型 無需另外聲明委托逞泄,可 直接創(chuàng)建一個委托實例
- Func 為有返回值的委托類型
class MyDelegate {
private static void ShowSomething() //無參數(shù)無返回值的方法
{
Console.WriteLine("這里是SonmeThing");
}
public static void Show()
{
Func<int> fun1 = new Func<int>(ShowGetthing);
fun1();//委托實例調(diào)用 無參數(shù) 有返回值
Func<int,int> fun2 = new Func<int,int>(Showthing);
fun2(100); // 有參數(shù) 有返回值 Func中的參數(shù)類型、返回值類型都需要標明紧憾,在泛型類型聲明中 當有返回值時候赴穗,最后一個參數(shù)類型為返回值類型
}
}