所以我有一个用.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
{
}
}
答案 0 :(得分:4)
您似乎正在寻找explicit interface implementation 1 。您可以编写:
public interface IFoo
{
void B();
}
public class Bar : IFoo
{
void IFoo.B()
{
}
}
现在{{1}上的B
仅在以Bar
的身份访问Bar
时可访问 。
1 而且,实际上,在IFoo
文档中,它是where you'll find IDictionary.Remove
listed。
答案 1 :(得分:1)
接口方法IDictionary<TKey, TValue>.Remove()
在ConcurrentDictionary<TKey, TValue>
中是implemented explicitly,需要接口引用才能调用该方法。
.NET Framework团队决定这样做的原因在文档中尚不清楚,但是是的,可以安全地调用它,因为它在内部仍然调用TryRemove()
。
如何重现相同的行为
请参见Explicit Interface Implementation (C# Programming Guide)。