郑州站,成都必去的地方排行,wordpress建外贸站,手机体验网站目录
一、委托
1.委托的实例化
2.委托的调用
3.示例
二、匿名方法 为了实现方法的参数化#xff0c;提出了委托的概念#xff0c;委托是一种引用方法的类型#xff0c;即委托是方法的引用#xff0c;一旦为委托分配了方法#xff0c;委托将与该方法具有完全相同的行为…目录
一、委托
1.委托的实例化
2.委托的调用
3.示例
二、匿名方法 为了实现方法的参数化提出了委托的概念委托是一种引用方法的类型即委托是方法的引用一旦为委托分配了方法委托将与该方法具有完全相同的行为另外.NET中为了简化委托方法的定义提出了匿名方法的概念。
一、委托 C#中的委托Delegate是一种引用类型该引用类型与其他引用类型有所不同在委托对象的引用中存放的不是对数据的引用而是存放对方法的引用即在委托的内部包含一个指向某个方法的指针。通过使用委托把方法的引用封装在委托对象中然后将委托对象传递给调用引用方法的代码。
[修饰符] delegate[返回类型] [委托名称]([参数列表])
其中
[修饰符]是可选项
[返回值类型]、关键字delegate和[委托名称]是必需项
[参数列表]是可选项用来指定委托所匹配的方法的参数列表。
一个与委托类型相匹配的方法必需满足以下两个条件
☑ 这二者具有相同的签名即具有相同的参数数目并且类型相同顺序相同参数的修饰符也相同。
☑ 这二者具有相同的返回值类型 委托是方法的类型安全的引用之所以说委托是安全的是因为委托和其他所有的C#成员一样是一种数据类型并且任何委托对象都是System.Delegate的某个派生类的一个对象。
//一个合法的委托定义
delegate void DelOutput(string s);
1.委托的实例化 在声明委托后就可以创建委托对象即实例化。实例化委托的过程就是将委托与特定的方法进行关联的过程。 早期的VS委托对象要使用new关键字创建。VS2022提供用更简单易懂的方法创建委托对象直接用方法名赋值给委托对象。
//创建委托对象其中DelOutput是委托名
DelOutput del Console.WriteLine; //创建委托对象直接指向Console.WriteLine
del(del()就是Console.WriteLine()); //委托对象调用方法
del.Invoke(匿名方法被调用); //委托调用匿名方法del NamedMethod; //修改委托对象指向方法NamedMethod
del(命名方法被调用); //委托对象调用命名方法2.委托的调用 创建并实例化委托对象后就可以用该委托代替方法并执行与方法。
3.示例
// 委托
namespace _08_1
{delegate void MyDelegate(string s);public class MyClass{static void Method(string s){Console.WriteLine(s);}public static void Method1(string s){Console.WriteLine(s);}static void Main(string[] args){MyDelegate my new(Method); //用方法直接创建实例可选newmy(江山如此多娇); //委托调用MyDelegate mydel Method; //用方法直接创建实例不选newmydel(沁园春.雪); //委托调用mydel Method1; //用另一个方法直接修改实例mydel(万里雪飘); //委托调用} }
}
//运行结果
/*江山如此多娇
沁园春.雪
万里雪飘 */
二、匿名方法 为了简化委托的可操作性在C#语言中提出了匿名方法的概念它在一定程度上降低了代码量并简化了委托引用方法的过程。 匿名方法允许一个与委托关联的代码被内联地写入使用委托的位置这使得代码对于委托的实例很接。除了这种便利之外匿名方法还共享了对本地语句包含的函数成员的访问。 匿名方法是C#2.0引入的一个新特性它允许开发者内联(inline)声明自己的函数代码而无须使用委托函数delegate。 当我们需要一个函数但又懒得去命名它的时候就可以使用匿名方法。在 C# 中 匿名方法通常表现为使用 delegate 运算符和 Lambda 表达式。
匿名方法使用场合
1. 需要一个临时方法该方法使用次数极少
2. 这个方法的代码很短甚至可能比方法声明都短的情况下 //匿名方法的语法格式
delegate([参数列表])
{[代码块]
}// 委托和匿名方法
namespace Demo
{delegate void DelOutput(string s); //自定义委托类型名称DelOutput class Program{static void NamedMethod(string k) //命名方法{Console.WriteLine(k);}static void Main(string[] args){ DelOutput del Console.WriteLine; //委托的引用指向Console.WriteLinedel(del()就是Console.WriteLine());del.Invoke(匿名方法被调用); //委托对象del调用匿名方法委托也可调用匿名方法Console.Write(\n);del NamedMethod; //委托绑定到命名方法NamedMethoddel(命名方法被调用); //委托对象del调用命名方法Console.ReadLine();}}
}
/*del()就是Console.WriteLine()
匿名方法被调用命名方法被调用 */