我有两个不同的类,即 Car 和 Radio 。 我怎样才能确保班级电台只能用于班级汽车? 或者这里是否有更好的实施?
我在c#编码。
class Car
{
// car has a radio
}
class Radio
{
// some properties
// some methods
void TurnOn(bool onOff) { }
}
提前致谢。
答案 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);
}
}
}