【问题标题】:Using Interface to add a private setter使用 Interface 添加私有 setter
【发布时间】:2012-07-16 09:19:09
【问题描述】:

我的接口只有一个属性,如下所示

public interface IExtendable
{
      Hashtable ExtendedProperties { get; set;}
}

我希望 setter 是私有的,但它不允许,因为它来自一个接口,并且据我所知,所有内容都应该在其中公开。

那么,允许私有 setter 的最佳做法是什么?

  • 在这种情况下不要使用接口还是什么?

提前致谢,

【问题讨论】:

  • 你可以使用抽象类。
  • 一个接口代表了其他类使用的对象的公共API。类的私有方面与消费者无关,因此没有理由将其放在接口中。
  • @Shaks 抽象类仍然无济于事,因为即使派生类也无法访问 private 成员,除非您将其设为 protected
  • @MattDavey - 没错。我的错。 :(
  • 谢谢大家。我猜到了答案

标签: c# .net


【解决方案1】:

您不能将私有设置器添加到接口。如果你想拥有一个私有的 setter,那么你的界面需要如下所示:

public interface IExtendable 
{       
     Hashtable ExtendedProperties { get; } 
} 

并且在接口的实现中你可以添加你的私有setter。

【讨论】:

  • +1 外界不应该知道或关心一个类的私有实现细节。
【解决方案2】:
private interface IExtendable
{
    Hashtable ExtendedProperties { get; }
}

private class Extendable: IExtendable
{
    Hashtable ExtendedProperties { get; private set; }
}

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2019-09-09
    • 2012-02-09
    相关资源
    最近更新 更多