c# - "cannot implement interface member"接口(interface)和混凝土在不同项目时的错误

标签 c# events dynamic

编译:

public interface IMyInterface
{
    event Action<dynamic> OnSomeEvent;
}

class MyInterface : IMyInterface
{
    public event Action<dynamic> OnSomeEvent;
}

但是当我将接口(interface)和实现分离到不同的项目时,我得到:

Accessor 'TestProject2.MyInterface.OnSomeEvent.remove' cannot implement interface member 'InterfaceNamespace.IMyInterface.remove_OnSomeEvent(System.Action)' for type 'TestProject2.MyInterface'. Use an explicit interface implementation.

这只发生在动态参数...

最佳答案

收获不错。这看起来可能是 C# 编译器中的错误 - 我将联系 Eric Lippert 以了解他的想法。 (dynamic 可能有点棘手;这个错误可能有一个非常好的但不明显的原因。)

编辑:下面的代码似乎终究无法工作。我本可以发誓我今天早上让它工作了......我很困惑到底是什么继续。根据 Simon 的评论,代码失败并显示一条消息,指出该语言不支持它。

请注意,如果您确实使用显式接口(interface)实现,它似乎编译得很好:

// Doesn't actually compile - see edit above
class MyInterface : IMyInterface
{
    private Action<dynamic> foo;

    event Action<dynamic> IMyInterface.OnSomeEvent
    {
        // TODO (potentially): thread safety
        add { foo += value; }
        remove { foo -= value; }
    }
}

编辑:这个答案的其余部分仍然有效......

请注意,您不能将类似字段的事件指定为显式实现的事件,即这不起作用:

event Action<dynamic> IMyInterface.OnSomeEvent;

它给出了以下错误信息:

Test.cs(15,39): error CS0071: An explicit interface implementation of an event must use event accessor syntax

如果您只是尝试更改事件访问器语法,您会得到与 原始代码。

请注意,将事件更改为属性可以很好地处理自动实现的属性实现。

关于c# - "cannot implement interface member"接口(interface)和混凝土在不同项目时的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926447/

相关文章:

java - 等待更新

javascript - 是否可以使用 javascript 中的自定义事件重新创建 "onClick event"?

c# - 在 Redis 缓存对象中执行搜索

c# - Windows Mobile 6.5 构建时间 (VS2008)

C# 从 ServerCertificateValidationCallback 获取 SMTP 服务器的 SSL 证书到期日期作为返回值

c# - 转换 Jil 动态反序列化对象数组时缺少无参数构造函数

javascript - 使用 jQuery 动态导入 javascript?

c# - 如何将对象列表转换为 csv?

java - 如何确定哪个菜单项称为 ActionListener?

javascript - 使用 javascript 创建 HTML 元素?