c# – 如何使用父接口中使用的相同方法实现多个接口
发布时间:2020-12-15 08:43:11 所属栏目:百科 来源:网络整理
导读:考虑以下接口: public interface IComponent { }public interface ISwitch : IComponent{ bool IsOn { get; } event EventHandler SwitchedOff; event EventHandler SwitchedOn;}public interface ISwitchable : ISwitch,IComponent{ void SwitchOff(); voi
考虑以下接口:
public interface IComponent { } public interface ISwitch : IComponent { bool IsOn { get; } event EventHandler SwitchedOff; event EventHandler SwitchedOn; } public interface ISwitchable : ISwitch,IComponent { void SwitchOff(); void SwitchOn(); } public interface IPowerSwitch : ISwitchable,ISwitch,IComponent { } public interface IHeatingElement : ISwitchable,IComponent { } 我在类这样的类中实现了IPowerSwitch: public class Kettle : IPowerSwitch { event EventHandler PowerOnEvent; event EventHandler PowerOffEvent; object objectLock = new Object(); public bool IsPowerOn; public Kettle() { IPowerSwitch p = (IPowerSwitch)this; p.SwitchedOn += new EventHandler(On_PowerOn_Press); p.SwitchedOff += new EventHandler(On_PowerOff_Press); } void ISwitchable.SwitchOff() { EventHandler handler = PowerOffEvent; if (handler != null) { handler(this,new EventArgs()); } } void ISwitchable.SwitchOn() { EventHandler handler = PowerOnEvent; if (handler != null) { handler(this,new EventArgs()); } } bool ISwitch.IsOn { get { return IsPowerOn ; } } event EventHandler ISwitch.SwitchedOff { add { lock (objectLock) { PowerOffEvent += value; } } remove { lock (objectLock) { PowerOffEvent -= value; } } } event EventHandler ISwitch.SwitchedOn { add { lock (objectLock) { PowerOnEvent += value; } } remove { lock (objectLock) { PowerOnEvent -= value; } } } protected void On_PowerOn_Press(object sender,EventArgs e) { if (!((IPowerSwitch)sender).IsOn) { Console.WriteLine("Power Is ON"); ((Kettle)sender).IsPowerOn = true; ((IPowerLamp)this).SwitchOn(); } else { Console.WriteLine("Already ON"); } } protected void On_PowerOff_Press(object sender,EventArgs e) { if (((IPowerSwitch)sender).IsOn) { Console.WriteLine("Power Is OFF"); ((Kettle)sender).IsPowerOn = false; ((IPowerLamp)this).SwitchOff(); } else { Console.WriteLine("Already OFF"); } } } 现在我想在这个类中实现IHeatingElement接口. IHeatingElement与IPowerSwitch具有相同的方法.那么我如何实现IHeatingElement的SwitchOn和SwitchOff.
我想要做的是,当电源开关事件被提升时,应该在此之后引发加热开启事件.当加热关闭时,应该提高电源开关关闭事件. 这是我的第一个问题,如果问题出现问题,请指导我. 解决方法
正如@ Peter-ritchie在评论中所说,“并非所有事情都需要通过继承来实现”.在您当前的代码中,您试图说水壶是一种电源开关和加热元件.我想你想说的是,水壶有一个电源开关和一个加热元件.这称为组合.
相反,你要构建像这样的Kettle对象: public class Kettle : ISwitchable { private IPowerSwitch Power; private IHeatingElement Heat; public Kettle() { Power = new PowerSwitch(); Heat = new HeatingElement(); } public void SwitchOn() { Power.SwitchOn(); Heat.SwitchOn(); } // And so on. } public class PowerSwitch : IPowerSwitch {} public class HeatingElement : IHeatingElement {} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |