我试图找出我是否以正确的方式看待收容/授权。在这个例子中,我有一个Car
和一个Radio
类型。我有一个函数,它接受一个字符串并更改IsOn
Radio 对象的属性值。我想知道哪种方法(或两者都不是)是否足以解决此问题。
(为简单起见,请忽略传入字符串到 TurnOn 方法的验证)
public int Year { get; set; }
public string Model { get; set; }
protected Radio radio = new Radio();
public Radio MyRadio
{
get { return radio; }
set { radio = value; }
}
public class Radio
{
public string ModelNumber { get; set; }
public bool IsOn { get; set; }
public void TurnOn(string turnOn)
{
if (turnOn == "yes")
{
if (IsOn)
Console.WriteLine("The radio is already on");
else
{
IsOn = true;
Console.WriteLine("You turned on the radio");
}
}
else
{
if (IsOn)
{
IsOn = false;
Console.WriteLine("You turned off the radio");
}
}
}
}
我在我的 Main 方法中对此进行了测试,输出在注释中的每一行旁边
Car c = new Car();
Console.WriteLine(c.MyRadio.IsOn); //false
c.MyRadio.TurnOn("yes"); //you turned on the radio
Console.WriteLine(c.MyRadio.IsOn);//true
c.MyRadio.TurnOn("yes"); //the radio is already on
c.MyRadio.TurnOn("no"); //you turned off the radio
Console.WriteLine(c.MyRadio.IsOn); //false
我想到的另一种方法是将以下函数添加到 Car 类
public void CarChangesState(string s)
{
MyRadio.TurnOn(s);
}
我使用以下代码对其进行了测试,一切都按预期工作
Car c2 = new Car();
Console.WriteLine(c2.MyRadio.IsOn);//false
c2.CarChangesState("yes"); //you turned on the radio
Console.WriteLine(c2.MyRadio.IsOn);//true
c2.CarChangesState("yes");//the radio is already on
c2.CarChangesState("no");//you turned off the radio
Console.WriteLine(c2.MyRadio.IsOn); //false
一个例子比另一个更好吗?从我的阅读中,Pro C# and the .NET Framework
我感觉第一次迭代并不是真正的委托,但我想知道一种方法是否比另一种方法的缺点更少。