所以我用 .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列出的.
米脂
TA贡献1836条经验 获得超3个赞
接口方法IDictionary<TKey, TValue>.Remove()
被明确地实现在一个ConcurrentDictionary<TKey, TValue>
,需要为了调用该方法的接口的参考。
.NET Framework 团队决定这样做的原因从文档中并不清楚,但是是的,调用它是安全的,因为在内部它仍然调用TryRemove()
.
我怎样才能重现相同的行为
请参阅显式接口实现(C# 编程指南)。
- 2 回答
- 0 关注
- 290 浏览
添加回答
举报
0/150
提交
取消