gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:52:00 25 4
gpt4 key购买 nike

编译:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com