本文主要介绍了C#委托delegate的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1.什么是委托
委托就是委托某个方法来实现具体的功能,类似于:甲方委托乙方去实现需求;出租房屋人委托中介为其出租房屋。
委托是一种引用类型,从数据结构上来讲:委托和类一样,都是一直用户自定义类型。
2:委托的实现
委托是对方法的抽象和封装。委托对象实质上代表了方法的引用(即内存地址)他存储的就是一系列具有相同签名和返回类型的方法的地址
可以理解为函数的一个包装,它使得c#中的函数可以作为参数来被传递
使用时遵循三步走原则:定义委托、实例化委托,调用委托
调用委托时,委托包含的方法将被执行
委托有三种方法:命名方法委托、多播委托、匿名委托
命名法委托
1:定义委托
修饰符 delegate 返回值类型 委托名 {参数列表}
public delegate void FirstDelegate ();
静态方法的实例化委托
2:实例化委托
委托名 委托对象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(Test.First);
委托的方法可以是静态方法的名称,也可以是实例化方法的名称
方法:
public class Test
{
public static void First()
{
Console.WriteLine("第一次实现静态方法类的委托");
}
}
3:调用
firstDelegate();
实例化方法的委托
2:实例化委托
委托名 委托对象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(new Test().First);
委托的方法可以是静态方法的名称,也可以是实例化方法的名称
方法:
public class Test
{
public void First()
{
Console.WriteLine("第一次实现实例化方法类的委托");
}
}
3:调用
firstDelegate();
多播委托
多播委托就是一个委托中注册多个方法,在注册方法时可以在委托中通过加号或则减号来实现添加或者撤销的方法。
例如 我想买饭吃 又想和奶茶 还想吃蛋糕,我委托一个人完不成,我需要委托三个人帮我完成,例如美团
1:定义委托
public class problem
{
public delegate void BuyDelegate();
static void mian()
{
BuyDelegate buyDelegate=new BuyDelegate(Buy.BuyFood);
buyDelegate+=Buy.BuyCake;
buyDelegate+=Buy.BuyTea;
buyDelegate();
}
}
public class Buy
{
public void BuyFood()
{
Conssole.WriyeLine("买个螺狮粉");
}
public void BuyCake()
{
Conssole.WriyeLine("买个蛋糕");
}
public void BuyTea()
{
Conssole.WriyeLine("买杯奶茶");
}
}
匿名委托
匿名委托就是 使用匿名的方法注册在委托上 ,实际上就是委托中通过定义代码块来实现委拖的作用
1:定义委托
修饰符 delegate 返回值类型 委托名(参数列表)
2:实例化委托
委托名 委托对象=delegate
{
代码块;
};
3:调用匿名委托
委托对象(参数列表);
1:实现水果买卖
public class program
{
public delegate void BuyFruit(double price,double count)
static void main(string[] arg)
{
BuyFurit buyFruit=delegate
{
Console.WriteLine("水果总价为"+price*count);
};
buyFruit(3,5);
}
}
什么时候适用委托
1:委托相当于用方法作为另一方法参数,同时,也可以实现在两个不能直接调用的方法中做桥梁,如在多线程中的跨线程的方法调用就得用委托。
2:委托使得一个方法可以作为另一个方法的参数进行传递,这就是委托最大的作用。使用委托可以将同类型的方法绑定到同一个变量上,当调用此变量时就可以一次调用绑定的方法,很方便。
到此这篇关于深入理解C#委托delegate的使用的文章就介绍到这了,更多相关C#委托delegate内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!
本文标题为:深入理解C#委托delegate的使用
- c# 模拟线性回归的示例 2023-03-14
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- Unity3D实现渐变颜色效果 2023-01-16
- 如何使用C# 捕获进程输出 2023-03-10
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- .NET CORE DI 依赖注入 2023-09-27
- Oracle中for循环的使用方法 2023-07-04
- user32.dll 函数说明小结 2022-12-26
- Unity Shader实现模糊效果 2023-04-27
- 在C# 8中如何使用默认接口方法详解 2023-03-29