Явная реализация свойств
То, что я хочу достичь, это просто, у меня есть интерфейс 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; }
}
Недавно была такая же ошибка... оказывается, если реализация явная, вы не пишете модификатор доступа.