C#的委托

C#委托(Delegate)
C#中的委托(Delegate)类似于C或C++中函数的指针。委托(Delegate)是存有对某个方法的引用的一种引用类型的变量。引用类型可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自System.Delegate类。
声明委托(Delegate)
委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。
例如:一个委托:
public delegate int MyDelegate(string s);
上面的委托可被用于引用任何一个带有一个单一的string 参数的方法,并返回一个int 类型的变量。
声明委托的语法如下:
delegate
实例化委托(Delegate)
一旦声明了委托类型,委托对象必须使用new关键字来创建,且与一个特定的方法有关。当创建委托时,传递new语句的参数就像方法调用一样书写,但是不带有参数。例如:
public delegate void printString(string s);

printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
下面的实列演示了委托的声明、实例化和使用,该委托可用于引用带有一个整型参数的方法,并返回一个整型值。

using System;
delegate int NumberChanger(int n);
namespace DelegateApp1
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}
public static int MultNum(int q)
{
num *= q;
return num;
}
public static int GetNum()
{
return num;
}
static void Main(strring[] args)
{
//创建委托实列
NumberChanger nc1 = new NumberChanger(AddNum);
NumberCharger nc2 = new NumberChanger(MultNum);
//使用委托对象调用方法
nc1(25);
Console.WriteLine(“Value of Num:{0}”,GetNum());
nc2(5);
Console.WriteLine(“Value of Num:{1}”,getNum());
Console.ReadKey();
}
}
}
委托的多播(Multicasting of a Delegate)
委托对象可使用"+“运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。”-"运算符可用于从合并的委托中移除组件委托。
使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的多播(multicasting),也叫组播。
委托(Delegate)的用途
下面的实例演示了委托的用法。委托printString可用于引用带有一个字符串作为输入的方法,并不返回任何东西。
我们使用这个委托来调用两个方法,第一个把字符串打印到控制台,第二个把字符串打印到文件:
using System;
using System.IO;

namespace DelegateApp1
{
clss PrintString
{
static FileStream fs;
static StreamWriter sw;
//委托声明
public delegate void printString(string s);
//该方法打印到控制台
public static void WritToScreen(string str)
{
Console.WriteLine(“The String is: {0}”,str);
}
//该方法打印到文件
public static void WriteToFile(string s)
{
fs = new FileStream(“D:\message.txt”,FileMode.Append,FileAccess.Write);
sw = new StreamWriter(fs);
sw.WriteLine(s);
sw.Flush();
sw.Close();
fs.Close();
}
//给方法把委托作为参数,并使用它调用方法
public static void sendString(printString ps)
{
ps(“Hello World”);
}
static void Main(string[] args)
{
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
sendString(ps1);
sendString(ps2);
Console.ReadKey();
}
}

}

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
C# 委托是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法,并可以在未知的时间点调用该方法。委托可以封装静态方法或实例方法,在事件处理、回调函数等场景中非常有用。 以下是关于 C# 委托的一些关键特性: 1. **声明**:通过 `delegate` 关键字来定义一个新的委托类型。例如: ```csharp public delegate int MathOperation(int x, int y); ``` 2. **创建和初始化**:可以通过直接指定目标方法名或使用 lambda 表达式来进行委托实例化。如下面的例子所示: - 使用普通方法: ```csharp static int Add(int a, int b) => a + b; // 创建委托并将其绑定到Add方法上 MathOperation operation = new MathOperation(Add); ``` - 或者更简洁地: ```csharp MathOperation addDelegate = (x,y)=>{return x+y;}; ``` 3. **调用**: 直接像调用常规方法一样去调用已赋值过的委托变量即可完成操作。 4. **多播委托**(Multicast Delegates):如果需要让多个接收方响应某个消息,则可以把几个单独的委托合并成一个多播形式;只需简单地对两个现有的委托对象执行加法运算就能实现了。(注意结果还是一个单个的对象) 5. **泛型委托**:为了提高灵活性及复用程度,C# 提供了一些内置的标准泛型委托Action<> 和 Func<>,它们分别用于表示无返回值的操作以及有返回值的功能. 6. **异步支持**:结合async/await语法糖可以让基于委托的任务变得十分方便快捷 7. **匿名方法**,Lambda表达式的引入简化了书写风格. 8. **与事件机制紧密相连** 总之,委托提供了强大的功能使得代码结构更加清晰合理,并且增强了程序设计模式的可能性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值