C# 在c中实现这一点的最佳OOP模式是什么

C# 在c中实现这一点的最佳OOP模式是什么,c#,design-patterns,C#,Design Patterns,代码片段不会编译,因为它只是为了展示我想要实现的目标: 假设我有一个界面: 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

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

      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;}

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

如果您想要私有设置,只需在接口中指定一个get:

  public interface IWalker 
  {
      double DistanceTravelled {get; }
  }
IWalker的实现者可以指定私有集:

  public class Walker : IWalker 
  {
      public double DistanceTravelled { get; private set;}
  }

如果需要私有设置,只需在接口中指定一个get:

  public interface IWalker 
  {
      double DistanceTravelled {get; }
  }
IWalker的实现者可以指定私有集:

  public class Walker : IWalker 
  {
      public double DistanceTravelled { get; private set;}
  }

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

接口级别的私有setter没有任何意义如果您想要一个接口上只有getter的属性,请参阅markheaths answer 受保护的实现也很奇怪,因为通过实现接口,属性无论如何都是公共的。
如果需要更多帮助,您必须提供有关设计的更多信息。

您的设计中存在缺陷。接口是用来描述API的“公共契约”的,所以很奇怪您想要一个私有setter和一个受保护的实现

接口级别的私有setter没有任何意义如果您想要一个接口上只有getter的属性,请参阅markheaths answer 受保护的实现也很奇怪,因为通过实现接口,属性无论如何都是公共的。
如果需要更多帮助,您必须提供有关设计的更多信息。

是否有理由将其作为一个界面?抽象类基本上是一样的,只是你可以添加受保护的方法。发现了这个,可能会有帮助吗@迈克,是的,所以我可以选择对任何一个进行编程。有什么理由它需要成为一个接口吗?抽象类基本上是一样的,只是你可以添加受保护的方法。发现了这个,可能会有帮助吗@迈克,是的,所以我可以选择对任何一个进行编程。