为了账号安全,请及时绑定邮箱和手机立即绑定

ConcurrentDictionary Remove() 不可访问

ConcurrentDictionary Remove() 不可访问

C#
汪汪一只猫 2021-10-24 19:22:54
所以我用 .NET 4.7 编译了这个最小的例子:class Program{    static void Main(string[] args)    {        IDictionary<int, string> dic = new ConcurrentDictionary<int, string>();        ConcurrentDictionary<int, string> sameDic = (ConcurrentDictionary<int, string>) dic;        dic.Add(1, "Hold");        dic.Add(2, "position");        dic.Remove(1); // OK         sameDic.Remove(2); // Not even compiling !!     }}那么打电话安全dic.Remove(1)吗?知道编译器不接受以下代码,我如何重现相同的行为?代码 :public interface IFoo{    void B();}public class Bar : IFoo{    private void B() // Not allowed     {    }}
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

您似乎在寻找显式接口实现1。你可以写:


public interface IFoo

{

    void B();

}


public class Bar : IFoo

{

    void IFoo.B()

    {

    }

}

Now BonBar仅在将 aBar作为IFoo.


1实际上,在ConcurrentDictionary<TKey,TValue>文档中,您可以在此处找到IDictionary.Remove列出的.


查看完整回答
反对 回复 2021-10-24
?
米脂

TA贡献1836条经验 获得超3个赞

接口方法IDictionary<TKey, TValue>.Remove()明确地实现在一个ConcurrentDictionary<TKey, TValue>,需要为了调用该方法的接口的参考。

.NET Framework 团队决定这样做的原因从文档中并不清楚,但是是的,调用它是安全的,因为在内部它仍然调用TryRemove().

我怎样才能重现相同的行为

请参阅显式接口实现(C# 编程指南)


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 290 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信