面向对象的类建模C#

时间:2011-09-01 15:33:52

标签: c# oop

我有两个不同的类,即 Car Radio 。 我怎样才能确保班级电台只能用于班级汽车? 或者这里是否有更好的实施?

我在c#编码。

class Car
{
    // car has a radio
}  


class Radio
{
    // some properties

        // some methods
        void TurnOn(bool onOff) { }        
}

提前致谢。

7 个答案:

答案 0 :(得分:6)

class Car {

  public Car() {
    myRadio = new Radio();
  }

  private class Radio {
    void TurnOn(bool onOff) {}
  }
}

答案 1 :(得分:4)

一种方法是通过构造函数强制Radio必须属于Car的依赖项:

class Radio
{
    Car owner;

    // constructor
    public Radio(Car car)
    {
        owner = car;
    }

    // some properties

    // some methods
    void TurnOn(bool onOff) { }        
}

另一种方法是将Radio对象嵌套在Car对象中。通常,这意味着不应该由Car之外的任何对象直接访问Radio。通过嵌套,这看起来像:

class Car 
{

    private class Radio 
    {
    }

    // add methods to affect the Radio object
}

答案 2 :(得分:1)

class Car
{
    class Radio
    {
        // some properties

        // some methods
        void TurnOn(bool onOff) { }        
    }        // car has a radio
}  

这使得除了Car之外,没有任何类可以看到Radio类。现在只有车内的东西可以开启或关闭。

答案 3 :(得分:0)

如果您想在其他地方使用收音机,收音机将是一个逻辑建模。如果你只想使用Radio in Car提供的内容,那么它可能还不值得上课,你在这里过度设计。如果您确实希望将Radio限制为仅可用于Car,则可以在汽车类中声明无线电。它不是很好,但它的答案是:P

public class Car
{
    class Radio
    {
        public void TurnOn()
        {
            // do stuff
        }
    }

    public Car()
    {
                    r = new Radio();
        r.TurnOn();
    }
}

public class NotCar
{
    // i cant use radio
}

答案 4 :(得分:0)

这是一个奇怪的问题,给出了汽车和无线电的概念(为什么其他人不能使用无线电)但回答是你可以使用Radio作为嵌套类型,具有私人访问权限,如

class Car
{ 
  Radio m_Radio = new Radio();
  private class Radio {...}
}

请注意,通过这种方式,您无法通过Car公共界面的任何部分将Radio暴露给外界,因此Car.Radio的所有工作都必须通过Car类进行中介,这对我来说听起来不是很好。< / p>

答案 5 :(得分:0)

试试这个

class Car 
{
   class Radio 
   {
      void TurnOn(bool onOff) { } 
   }
}

Radio类是私有的,只能通过Car类访问

答案 6 :(得分:0)

我已经阅读了上面所有的答案,都很好,但是我想尝试另一种方法来实现带有收音机的汽车,方法是考虑可以装配通用收音机或老板收音机的汽车。我使用接口依赖注入原理,多态继承概念来实现此目的。通过这种方法,我们从 IRadio 接口实现了Generic和Boss无线电。 请参阅下面的代码以供参考

namespace CarAndRadioProgramExample
{
    class Program
    {
        static void Main(string[] args)
        {
            GeneralRadio gRadio = new GeneralRadio();
            gRadio.MaximumVolume = 100;
            gRadio.MinimumVolume = 0;
            Car carWithGRadio = new Car(gRadio);
            carWithGRadio.SwitchOnCarRadio();

            BossRadio bRadio = new BossRadio();
            bRadio.MaximumVolume = 200;
            bRadio.MinimumVolume = 0;
            Car carWithBRadio = new Car(bRadio);
            carWithBRadio.SwitchOnCarRadio();

            Console.ReadLine();
        }
    }

    class Car
    {
        IRadio carRadio;
        public Car(IRadio radioObject)
        {
            carRadio = radioObject;
        }

        internal void SwitchOnCarRadio()
        {
            carRadio.RadioOn();
        }
    }

    interface IRadio
    {
        int MaximumVolume { get; set; }
        int MinimumVolume { get; set; }
        void RadioOn();
    }
   class GeneralRadio :IRadio
    {
        public int MaximumVolume
        {
            get;
            set;
        }
       public int MinimumVolume
        {
            get;
            set;
        }

        public void RadioOn()
        {
            Console.WriteLine("Switching On Generic Radio with maximum volume" + MaximumVolume + "and minimum volume" + MinimumVolume);
        }
    }

    class BossRadio : IRadio
    {
        public int MaximumVolume
        {
            get;
            set;
        }
        public int MinimumVolume
        {
            get;
            set;
        }

        public void RadioOn()
        {
            Console.WriteLine("Switching On Boss Radio with maximum volume" + MaximumVolume + "and minimum volume" + MinimumVolume);
        }
    }

}

运行上面的代码时,输​​出将是 enter image description here