ConcurrentDictionary Remove() 不可访问

所以我用 .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 

    {

    }

}


汪汪一只猫
浏览 291回答 2
2回答

慕尼黑8549860

您似乎在寻找显式接口实现1。你可以写:public interface IFoo{&nbsp; &nbsp; void B();}public class Bar : IFoo{&nbsp; &nbsp; void IFoo.B()&nbsp; &nbsp; {&nbsp; &nbsp; }}Now BonBar仅在将 aBar作为IFoo.1实际上,在ConcurrentDictionary<TKey,TValue>文档中,您可以在此处找到IDictionary.Remove列出的.

米脂

接口方法IDictionary<TKey, TValue>.Remove()被明确地实现在一个ConcurrentDictionary<TKey, TValue>,需要为了调用该方法的接口的参考。.NET Framework 团队决定这样做的原因从文档中并不清楚,但是是的,调用它是安全的,因为在内部它仍然调用TryRemove().我怎样才能重现相同的行为请参阅显式接口实现(C# 编程指南)。
打开App,查看更多内容
随时随地看视频慕课网APP