显式实现属性

时间:2015-02-18 16:19:00

标签: c# interface member-hiding

我想要实现的很简单,我有一个接口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 个答案:

答案 0 :(得分:1)

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

}

最近有同样的错误......如果实施是明确的,你就不会写访问修饰符。

答案 1 :(得分:1)

中删除public
public DatasourceSettings IDatasource.DatasourceSettings 

因为它是显式实现接口方法,所以它是先验公共的