1.委托的定义
委托可以看成是一种数据类型,可以用于定义变量能接受的值只能是一个方法。
委托简单的示例:
代码如下:
namespaceDelegateDemo
{
classProgram
{
publicdelegateintMathOptDelegate(intvalue1,intvalue2);
publicintadd(intvalue1,intvalue2)
{
returnvalue1+value2;
}
staticvoidMain(string[]args)
{
MathOptDelegatemod;
Programp=newProgram();
mod=p.add;
Console.WriteLine(mod(3,5));
Console.ReadKey();
}
}
}
利用委托的构造函数创建委托
代码如下:
namespaceDelegateDemo
{
classProgram
{
publicdelegateintMathOptDelegate(intvalue1,intvalue2);
publicintadd(intvalue1,intvalue2)
{
returnvalue1+value2;
}
staticvoidMain(string[]args)
{
Programp=newProgram();
MathOptDelegatemod=newMathOptDelegate(p.add);
Console.WriteLine(mod(3,5));
Console.ReadKey();
}
}
}
从这个示例中可以得出这样的直观印象:
委托可以堪称是一个方法的容器,将某一个具体的方法装入后,就可以把它当成方法一样使用。
2.委托的调用列表
从上一个例子看,委托变量可以引用某一个方法,调用它就相当于调用这个方法。
如果委托今年仅是方法调用的另一种形式,那何必多此一举引入委托这一特性?直接调用方法不是更简单明了?
因为委托变量不仅可以引用另一个方法,还可以组合多的方法并批量执行它们。
代码如下:
namespaceDelegateDemo2
{
classProgram
{
publicdelegatevoidMyDelegate(Stringstr);
publicstaticvoidhello(Stringstr)
{
Console.WriteLine(str+”你好”);
}
publicstaticvoidgoodbye(Stringstr)
{
Console.WriteLine(str+”再见”);
}
staticvoidMain(string[]args)
{
MyDelegatea,b,c,d;
a=Program.hello;
a(“a”);
b=Program.goodbye;
b(“b”);
c=a+b;//等价将两个方法体合并
c(“c”);//c你好c再见
d=c-a;
d(“d”);//d再见
Console.ReadKey();
}
}
}
像C这样的委托变量可称为多路委托变量。
可以用加法运算符来组合单个委托变量为多路委托变量。类似的,也可以使用减法运算符来从一个多路委托变量中移除某个委托变量。
代码如下:
namespaceDelegateDemo2
{
classProgram
{
publicdelegatevoidMyDelegate(Stringstr);
publicstaticvoidhello(Stringstr)
{
Console.WriteLine(str+”你好”);
}
publicstaticvoidgoodbye(Stringstr)
{
Console.WriteLine(str+”再见”);
}
staticvoidMain(string[]args)
{
MyDelegatea,b,c,d;
a=Program.hello;
a(“a”);
b=Program.goodbye;
b(“b”);
c=a+b;//等价将两个方法体合并
c(“c”);//c你好c再见
d=c-a;
d(“d”);//d再见
Delegate[]ds;
ds=c.GetInvocationList();
foreach(Delegatesinds)
{
Console.WriteLine(s);
//DelegateDemo2.Program+MyDelegate
//DelegateDemo2.Program+MyDelegate
}
Console.WriteLine(ds.Length);
Console.ReadKey();
}
}
}
如果委托定义的方法有返回值,则多路委托变量的返回值为委托调用列表中最后一个方法的返回值,中间调用的方法返回值会被丢弃。
使用泛型委托:
Func系列委托
以下是Func熄了委托的定义,依其泛型类型参数的多少有多个重载形式:
publicdelegateTResultFunc<Tresult>();
publicdelegateTResultFunc<T,Tresult>();
上述就是C#学习教程:基于C#委托的深入分析分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com) 您可能感兴趣的文章:C#中委托和事件在观察者模式中的应用实例C#委托delegate实例解析c#委托详解和和示例分享c#委托学习示例分享c#委托把方法当成参数(实例讲解)c#并行任务多种优化方案分享(异步委托)C#委托的三种调用示例(同步调用异步调用异步回调)C#中委托的基本用法
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/904606.html