Явная реализация свойств

То, что я хочу достичь, это просто, у меня есть интерфейс IDatasource, который имеет свойство под названием DatasourceSettings

public interface IDatasource
{
    DatasourceSettings DatasourceSettings { get; set; }
}

Класс реализации выглядит следующим образом

public class TestDatasource : IDatasource
{
    public DatasourceSettings IDatasource.DatasourceSettings { get { return DatasourceSettings; } set { DatasourceSettings = (TestDatasourceSettings)value; } }
    public TestDatasourceSettings DatasourceSettings { get; set; }
}

Как вы, возможно, видите, свойство сначала реализуется явно, и оно должно возвращать DatasourceSettings Свойство самого класса

Итак, вот что я хочу достичь

var ds = new TestDatasource();

if (ds.DatasourceSettings is TestDatasourceSettings && 
    ((IDatasource)ds).DatasourceSettings is DatasourceSettings)
{
    // should be true
}

Ошибка, которую я получаю:

The modifier 'public' is not valid for this item

Так что здесь не так?

2 ответа

Решение

Удалить public от

public DatasourceSettings IDatasource.DatasourceSettings 

Поскольку он явно реализует метод интерфейса, он является априори публичным

public class TestDatasource : IDatasource
{
    DatasourceSettings IDatasource.DatasourceSettings { get { return DatasourceSettings; } set { DatasourceSettings = (TestDatasourceSettings)value; } }
    public TestDatasourceSettings DatasourceSettings { get; set; }

}

Недавно была такая же ошибка... оказывается, если реализация явная, вы не пишете модификатор доступа.

Другие вопросы по тегам