代码之家  ›  专栏  ›  技术社区  ›  dexter

在c#[关闭]中,最好的OOP模式是什么

  •  1
  • dexter  · 技术社区  · 15 年前

    代码片段不会编译,因为它只是为了展示我想要实现的目标: 假设我有一个接口:

          public Interface IWalker 
          {
              //Compiles but not what I need
              double DistanceTravelled {get; set;}
    
              //Compiler error - cant be private for set, but that's what I need
              //double DistanceTravelled {get; private set;}
          }
    
          public abstract AbstractWalker : IWalker 
          {
               //Error:Cannot implement - but thats what I need
               //protected double DistanceTravelled {get; private set} 
    
               //Error the set is not public and I dont want the property to be public
               //public double DistanceTravelled { get;private  set; }
    
                 //Compiles but not what i need at all since I want a protected 
                 // property -a. and have it behave as readonly - b. but 
                 // need it to be a part of the interface -c.
                 public double DistanceTravlled {get; set;}
    
          }
    

    我所有抽象行者的具体实例实际上都是IWalker的类型。 实现我在代码片段中指定的设计的最佳方法是什么?

    2 回复  |  直到 15 年前
        1
  •  10
  •   Mark Heath    15 年前

    如果需要私有集,只需在接口中指定get:

      public interface IWalker 
      {
          double DistanceTravelled {get; }
      }
    

    IWalker的实现者可以指定私有集:

      public class Walker : IWalker 
      {
          public double DistanceTravelled { get; private set;}
      }
    
        2
  •  0
  •   jeroenh    15 年前

    你的设计有缺陷。接口用于描述API的“公共契约”,所以很奇怪您想要(a)一个私有setter和(b)一个受保护的实现。

    • 接口级的私有setter没有任何意义(如果您想要在接口上只有getter的属性,请参阅Mark Heaths answer)
    • 受保护的实现也很奇怪,因为通过实现接口,属性无论如何都是公共的。

    如果你需要更多的帮助,你必须提供更多关于你的设计的信息。

    推荐文章