关于开闭原理,我有些不了解。假设您已完成以下代码:
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
。它可以扩展。但是,如果您已经有了Jump
或Fight
之类的方法,并且想要对其进行修改,那就违反了原理。
想象一下,您的类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/