所以我的问题是,当我想切换两个灯时,它只切换了Strip2两次。所以看起来好像只是用Strip2的light变量覆盖Strip1的light变量,我不明白,为什么这样做呢?你能帮帮我吗?这是代码:
namespace SmartServer
{
class Program
{
static void Main(string[] args)
{
Initialize();
}
//Eszközök inicializálása:
private static void Initialize()
{
DebugServer.StartServer();
//Plug1.Plug1_Initialize();
Strip1 s1 = new Strip1();
Strip2 s2 = new Strip2();
Strip1.Toggle();
Strip2.Toggle();
}
}
class StripBase
{
private static Light light;
public static void SetLight(string ip)
{
light = new Light(ip);
}
public static void TurnOn()
{
light.TurnOn();
}
public static void TurnOff()
{
light.TurnOff();
}
public static void Toggle()
{
if (light.IsOn) TurnOff(); else TurnOn();
}
}
class Strip1 : StripBase
{
public Strip1()
{
StripBase.SetLight("192.168.0.204");
}
}
class Strip2 : StripBase
{
public Strip2()
{
StripBase.SetLight("192.168.0.205");
}
}
}
这不是在C#中进行继承的方式。本质上,您已经创建了一个实用工具类(一个只包含静态方法的类),其他每个类都调用该类。
为了使用继承结构化程序,请在static
中的变量和方法上删除StripBase
关键字,然后将virtual
关键字应用于您要覆盖的任何方法。然后使用:
指定Strip1
和Strip2
作为StripBase
的子级。
namespace SmartServer
{
class Program
{
static void Main(string[] args)
{
Initialize();
}
//Eszközök inicializálása:
private static void Initialize()
{
DebugServer.StartServer();
//Plug1.Plug1_Initialize();
Strip1 s1 = new Strip1();
Strip2 s2 = new Strip2();
Strip1.Toggle();
Strip2.Toggle();
}
}
class StripBase
{
private Light light;
public void SetLight(string ip)
{
light = new Light(ip);
}
public void TurnOn()
{
light.TurnOn();
}
public void TurnOff()
{
light.TurnOff();
}
public void Toggle()
{
if (light.IsOn) TurnOff(); else TurnOn();
}
}
class Strip1 : StripBase
{
public Strip1()
{
SetLight("192.168.0.204");
}
}
class Strip2 : StripBase
{
public Strip2()
{
SetLight("192.168.0.205");
}
}
}