在线等,关于代理的问题。

gabriel1 2020-07-28 05:39:47
声明了一个代理方法,没有参数。
public delegate void FileChangeDelegate();


调用的地方
private void RegisterFileWatch(FileReadRequest request, FileChangeDelegate onChanged)
{
FileWatch.Changed -= new FileSystemEventHandler(onChanged); //这里
}
//new FileSystemEventHandler需要这样参数的方法代理(object source, FileSystemEventArgs e)
//有没有办法进一步包装下,让传入的onChanged不需要定义参数?
...全文
540 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你这个写法不仅仅是麻烦,而且对象(逻辑)也不对。

首先看传统的有完整方法声明的注册、注销方法:
private void test(object sender, EventArgs e)
{
cs.MessageReceived -= Cs_MessageReceived;
}

[code=csharp]private void Cs_MessageReceived(object sender, MessageReceivedEventArgs r)
{
.........
}
[/code]这里 c# 编译器认识方法是一个静态 method 对象。

而动态产生的委托对象,则需要你的代码手动保存,例如:
Action<object, EventArgs> csv;

private void test1(object sender, EventArgs e)
{
csv = new Action<object, EventArgs>((s, arg) =>
{
..........
});
cs.MessageReceived += csv;
}

private void test2(object sender, EventArgs e)
{
if (csv != null)
cs.MessageReceived -= csv;
}


这里,你要先把委托声明为对象,然后用“准确的对象实例”来注册、注销。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧