因此,我希望将多播操作存储在一个类中,并传递从修改类的私有操作对象的类方法调用它的方法:

public class Bar;

public class Xzxxy
{
    public delegate void BarDelegate(Bar bar);
    private Action<Bar> BarAction;

    public void Add(BarDelegate bd)
    {
        BarAction += bd;
    }

    public void Invoke(Bar bar)
    {
        BarAction.Invoke(bar);
    }
}

这不起作用,因为在Xzxxy.Add中,第BarAction += bd;行有以下错误

不能隐式将Xzzzy.BarDelegate转换为System.Action<Bar>.

我应该如何声明BarDelegate才能获得我想要的行为?

推荐答案

这里有一个解决方案

public void Add(BarDelegate bd)
{
    BarAction += (bar)=>bd(bar);
}

或者更好的方法是将Action<Bar>传递给Add方法

public void Add(Action<Bar> bd)
{
    BarAction += bd;
}

BarDelegate的定义是无用的,也是多余的.因为Action<Bar>是一个以Bar类为参数并返回void的委托,所以您不需要为此定义新的委托!

Csharp相关问答推荐

当Visual Studio处于升级管理模式时,无法安装Torch运行时

ListaryImportProperty的默认DllImportSearchPathsProperty行为

总是丢弃返回的任务和使方法puc无效之间有区别吗?

在. NET Core 8 Web API中,当为服务总线使用通用消费者时,如何防止IServiceProvider被释放或空?"

Azure DEVOPS找不到定制的Nuget包

MS Graph v5.42.0:在寻呼消息时更改页面大小

C#阻塞调用或await calling inside calling方法

从VS调试器而不是测试资源管理器运行的调试NUnitDotNet测试

C#Null判断处理失败

确定System.Text.Json序列化中是否无法识别Type

如何在C#中转换泛型包装类内部的派生类

什么类型的对象存储在大对象堆(LOH)中

MSI无法将快捷方式添加到启动文件夹

{ or ; expected error如何解决此问题

发布.NET 8 Blazor WebAssembly独立应用程序以进行静态站点部署

与另一个对象位于同一位置的对象具有不同的变换位置

如何处理ASP.NET Core中包含两个构造函数的控制器?

异步等待,如何在Windows窗体中使用它们?

无法通过服务控制台启动.NET Core 6.0服务(错误1053)

MudRadioGroup不切换