[C#继承问题,当我创建2个从基类继承的类时

问题描述 投票:-1回答:1

所以我的问题是,当我想切换两个灯时,它只切换了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# class inheritance
1个回答
0
投票

这不是在C#中进行继承的方式。本质上,您已经创建了一个实用工具类(一个只包含静态方法的类),其他每个类都调用该类。

为了使用继承结构化程序,请在static中的变量和方法上删除StripBase关键字,然后将virtual关键字应用于您要覆盖的任何方法。然后使用:指定Strip1Strip2作为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");
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.