Вы реализуете свойство Keys
явно. Если вы хотите сделать этот элемент общедоступным (или protected
), измените IDictionary<string, string>.Keys
на Keys
и добавьте соответствующий модификатор видимости перед ним.
public ICollection<string> Keys { ... }
или
protected ICollection<string> Keys { ... }
Вы также можете сослаться на base
как экземпляр IDictionary<string, string>
:
((IDictionary<string, string>)base).Keys
Дополнительная информация
(Судя по вашим комментариям, вы, кажется, знакомы с различием, но другие могут и не быть)
Реализация интерфейса C # может быть выполнена двумя способами: неявно или явно. Давайте рассмотрим этот интерфейс:
public interface IMyInterface
{
void Foo();
}
Интерфейс - это просто контракт на то, какие члены класс должен сделать доступными для кода, который его вызывает. В этом случае у нас есть одна функция с именем Foo
, которая не принимает параметров и ничего не возвращает. Неявная реализация интерфейса означает, что вы должны предоставить член public
, который соответствует имени и подписи члена в интерфейсе, например:
public class MyClass : IMyInterface
{
public void Foo() { }
}
Это удовлетворяет интерфейсу, поскольку он предоставляет член public
в классе, который соответствует каждому члену в интерфейсе. Это то, что обычно делается. Однако можно явно реализовать интерфейс и отобразить функцию интерфейса на член private
:
public class MyClass : IMyInterface
{
void IMyInterface.Foo() { }
}
Это создает приватную функцию на MyClass
, которая доступна только внешним абонентам, когда они ссылаются на экземпляр IMyInterface
. Например:
void Bar()
{
MyClass class1 = new MyClass();
IMyInterface class2 = new MyClass();
class1.Foo(); // works only in the first implementation style
class2.Foo(); // works for both
}
Явные реализации всегда private. Если вы хотите представить его за пределами класса, вам нужно будет создать другого члена и представить его, а затем использовать явную реализацию для вызова другого члена. Обычно это делается для того, чтобы класс мог реализовывать интерфейсы, не загромождая свой общедоступный API, или если два интерфейса предоставляют члены с одинаковым именем.