关于开闭原理,我有些不了解。假设您已完成以下代码:

public abstract class Player
{
    public string Name { get; set; }
    public int Level { get; set; }
}

public sealed class Fighter : Player { /* ... */ }
public sealed class Warrior : Player { /* ... */ }


这段代码可以完美运行,您已经完成了第一个发行版,一切都很正常。
现在,您想添加一些功能,例如玩家可以装备戒指。开闭原理说可以扩展,可以修改。如果我不修改这些类,我该如何实现我的播放器会响铃的事实?

最佳答案

您可以通过添加新的方法和字段来修改类Player。它可以扩展。但是,如果您已经有了JumpFight之类的方法,并且想要对其进行修改,那就违反了原理。

想象一下,您的类Fighter具有方法Fight(),并且只使用裸手:

public Fighter() : Player
{
  ...
  public virtual void Fight()
  {
    //use bare hands
  }
}


例如,如果要Fighter用棍子打架,则不应修改初始方法Fight(),而应添加另一个类,例如FighterWithStick : Fighter并在其中覆盖方法Fight()

public FighterWithStick() : Fighter
{
  ...
  public override void Fight()
  {
    //use stick
  }
}

关于c# - 关于新功能的开闭原则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52813915/

10-09 05:02