【问题标题】:Explicit implementation of properties显式实现属性
【发布时间】:2015-04-19 17:41:18
【问题描述】:

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

那么这里出了什么问题?

【问题讨论】:

    标签: c# interface member-hiding


    【解决方案1】:

    中删除public
    public DatasourceSettings IDatasource.DatasourceSettings 
    

    因为它显式地实现了一个接口方法,所以它是先验公开的

    【讨论】:

      【解决方案2】:
          public class TestDatasource : IDatasource
          {
              DatasourceSettings IDatasource.DatasourceSettings { get { return DatasourceSettings; } set { DatasourceSettings = (TestDatasourceSettings)value; } }
              public TestDatasourceSettings DatasourceSettings { get; set; }
          }
      

      最近犯了同样的错误...如果实现是显式的,你就不用写访问修饰符。

      【讨论】:

        猜你喜欢
        • 2020-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多