Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象依赖关系和交互_C#_Oop - Fatal编程技术网

C# 对象依赖关系和交互

C# 对象依赖关系和交互,c#,oop,C#,Oop,编辑: 我正在钻研OOP的概念,但当我认为我在头脑中找到了它时,我又在实践中感到困惑 我创建了两个类: 灯光(表示灯泡) 开关,它应该改变灯泡的状态 public class Switch { private Light _light; public LightState State { get { return _light.CurrentState; } private set { _light.CurrentState = valu

编辑:

我正在钻研OOP的概念,但当我认为我在头脑中找到了它时,我又在实践中感到困惑

我创建了两个类: 灯光(表示灯泡)

开关,它应该改变灯泡的状态

public class Switch
{
    private Light _light;

    public LightState State
    {
        get { return _light.CurrentState; }
        private set { _light.CurrentState = value; }
    }

    public Switch(Light light)
    {
        _light = light;
    }

    public void TurnLightsOff()
    {
        if (State.Equals(LightState.OFF))
        {
            PrintState(LightState.OFF);
        }
        else
        {
            State = LightState.OFF;
        }
    }

    public void TurnLightsOn()
    {
        if (State.Equals(LightState.ON))
        {
            PrintState(LightState.ON);
        }
        else
        {
            State = LightState.ON;
        }
    }
}
我不理解交互部分,在我的示例中它做得对吗


假设我介绍另一个类
Man
,他可以打开/关闭开关,那么
Man
对象应该如何更改
开关的状态?

开关在这里是多余的。将这些方法置于
灯下
并执行

public class Light 
{
    ....
    public void Flip()
    {
       if( CurrentState == LightState.ON )
       {
           CurrentState = LightState.OFF;
       } else {
           CurrentState = LightState.ON;
       }   
     }
}
一个人能在光下行动的能力

public class Man
{
    ....
    public void TurnLightOn(Light light)
    {
        light.CurrentState = LightState.ON;
    }
    public void FlipLight(Light light)
    {
        light.Flip();
    }
}

Man
将从初始化的
开关调用
TurnLightsOff()
TurnLightsOn()
,为什么不为state创建一个枚举,而不是一个带有奇怪列表验证的int呢。一个开关控制一个灯泡,但一个人可以控制多个开关。这种关系几乎是一样的。哦,说实话。我对这件事有一种奇怪的似曾相识的感觉question@SamIam什么意思?
public class Man
{
    ....
    public void TurnLightOn(Light light)
    {
        light.CurrentState = LightState.ON;
    }
    public void FlipLight(Light light)
    {
        light.Flip();
    }
}