c#报错不实现接口成员_当接口和具体在不同的项目中时,c#-“无法实现接口成员”错误...

本文探讨了在C#中遇到的'无法实现接口成员'的编译错误,尤其是在接口和实现位于不同程序集时。通过分析Foo1和Foo2类的错误实现,以及Foo3类的正确实现,揭示了编译器可能存在的问题。通过泛型的使用,编译器能够确保类型安全,从而避免错误。文章提出,编译器可能因为无法验证动态变量在外部程序集中事件处理程序列表中的状态而导致错误。
摘要由CSDN通过智能技术生成

这个答案是要阐明您对这个有趣问题的想法。 这不是一个真正的答案,而是对整个讨论的贡献,对于正常的评论而言,这个贡献很小。

我检查了几件事,这个界面:

namespace DifferentAssemblyNamespace

{

public interface IBar

{

event Action OnSomeEvent;

}

}

及其实现:

// implicit interface implementation

// generates compile error "Explicit interface implementation"

public class Foo1 : IBar

{

private Action foo;

public event Action OnSomeEvent

{

add { foo += value; }

remove { foo -= value; }

}

}

// implicit interface implementation

// generates compile error "Not supported by the language"

public class Foo2 : IBar

{

private Action foo;

event Action IBar.OnSomeEvent

{

add { foo += value; }

remove { foo -= value; }

}

}

永远不会起作用,似乎一个规则正在排除另一条必要规则。

但是..如果我们调用泛型来寻求帮助,并使用Type参数而不是直接使用dynamic,例如:

namespace DifferentAssemblyNamespace

{

public interface IGenericBar

{

event Action OnSomeEvent;

}

}

及其实现。

// implicit interface implementation

public class Foo3 : IGenericBar

{

private Action foo;

event Action IGenericBar.OnSomeEvent

{

add { foo += value; }

remove { foo -= value; }

}

}

由于某些原因,我们可以构建(应该运行)并运行:

/** does build **/

IGenericBar f = new Foo3();

f.OnSomeEvent += new Action(f_OnSomeEvent);

似乎Type Parameter做了一些编译器满意的事情。

我不确定发生了什么,所以我也想知道。

假设,高度假设(也许废话)

但目前我把两分钱放在 必须有类型的比较 通过添加/删除访问器在 包含 事件的目标/方法。

我打赌 编译器跌倒了 无法保证什么的问题 动态变量位于外部程序集中,因此无法确定列表中是否已存在某个元素,这是添加或删除它们所必需的。(因此,实现显式接口)

我们都知道这只是一个 归因于对象,但看起来 它需要一个额外的步骤,其中一些 强类型是有保证的,那就是 T在编译时的作用。

/假设,高度假设(可能是胡扯)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值