AI智能
改变未来

.NET/C#高级进阶合集视频-委托


委托

1)介绍:实质上是一个类,通过ILSpy中间语言查看,可明确知道!它定义了委托方法的返回类型和参数列表,使得可以将方法当作另一个方法的参数来进行传递。可用来隐藏目标方法,可减少重复代码,代码复用。
简单工厂属于创建型,关心的是对象创建而非方法使用。委托则关心方法使用而非对象创建
2)实现

//委托可以定义在类内部也可以在外部
public delegate void DelegateInt(int num);
class MyDelegate
{
//需要委托方法一定要与定义的委托一样,参数列表和返回类型一样。
public void returnInt(int n)
{
Console.WriteLine(n);
}
}

```//声明目标需要委托的类,以便使用MyDelegate myDelegate = new MyDelegate();//使用需要委托的方法实例化委托DelegateInt delegateInt = new DelegateInt(myDelegate.returnInt);//调用委托方法delegateInt(123)//前面是简写或者delegateInt.Invoke(123)```</code></pre>3)泛型委托<code>//定义public delegate T DataDelegate<T>();</code><pre><code>  DataDelegate<int> dataDelegate = new Ticket12306.DataDelegate<int>(ticket12306.GetYuPiao);dataDelegate.Invoke();DataDelegate<bool> dataDelegate2 = new Ticket12306.DataDelegate<bool>(ticket12306.IsHasTicket);dataDelegate2.Invoke();DataDelegate<User> dataDelegate3 = new Ticket12306.DataDelegate<User>(ticket12306.GetUser);dataDelegate3.Invoke();</code></pre>4)委托多播(如需要使用返回值,使用最后一个委托方法的返回值)```//定义public delegate void TickitDelegaete();public delegate T DataDelegate();public void SaleTicket(){Console.WriteLine(\"12306出票咯\");}
public int GetYuPiao(){Console.WriteLine(\"还有100张票\");return 100;}public int GetTuiPiao(){Console.WriteLine(\"现在有24张退票\");return 100;}


//使用
Ticket12306 ticket12306 = new Ticket12306();

DataDelegate<int> dataDelegate = new Ticket12306.DataDelegate<int>(ticket12306.GetYuPiao);dataDelegate += ticket12306.GetTuiPiao;//还可以使用-=dataDelegate.Invoke();//这里一次性执行上面委托的两个方法,按定义顺序执行

5)实践使用

//飞猪卖票12306(可解藕)
//创建目标委托所在的对象
Ticket12306 ticket12306 = new Ticket12306();

//创建委托TickitDelegaete tickitDelegaete = new TickitDelegaete(ticket12306.SaleTicket);//调用第三方类方法执行(放在第三方解藕)TicketPig ticketPig = new TicketPig();ticketPig.SaleTicket(tickitDelegaete);

```
6)委托的其他写法:
1、委托 委托名=new 委托(会调用的方法名); 委托名(参数);//常规写法
2、委托 委托名 =会调用的方法名; 委托名(参数); //上面的简写
3、匿名方法:委托 委托名=delegate(参数){会调用的方法体};委托名(参数);
4、拉姆达表达式:委托 委托名=((参数1,。。参数n)=>{会调用的方法体});委托名(参数);
5、用Action和Func //Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托。
a)Action<T1,T2....T16>,表示无返回值的委托类型,T参数个数是16个内不定
b)和Func<T1,T2....T16,TResult>表示最多一个返回值的委托类型,T参数个数是16个内不定,但TResult一定要有

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » .NET/C#高级进阶合集视频-委托