编译:
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/