Big*_*les 7 c# design-patterns single-responsibility-principle design-principles solid-principles
我最近一直在考虑Liskov替换原则以及它与我当前任务的关系.我有一个包含菜单的主表单; 在这个主要表单中,我将一个特定的表单作为MDI子对接.此特定表单可能包含也可能不包含菜单.如果是,我想将它与主菜单合并.所以情况是这样的:
public class MainForm
{
public void Dock(SpecificBaseForm childForm)
{
this.Dock(childForm);
if (childForm is IHaveMenu)
{
this.Menu.Merge(childForm as IHaveMenu).Menu;
}
}
}
public interface IHaveMenu
{
Menu Menu {get;}
}
public abstract class SpecificBaseForm{}
public class SpecificFormFoo : SpecificBaseForm {}
public class SpecificFormBar: SpecificBaseForm,IHaveMenu
{
public Menu Menu{get {return this.Menu;}}
}
Run Code Online (Sandbox Code Playgroud)
现在这两个孩子并不是"完全"可互换的:一个有菜单; 另一个没有.这是在C#中误用is/as contruct吗?如果这不正确,那么干净的解决方案是什么?