【问题标题】:How to make ConnectOutput?如何制作连接输出?
【发布时间】:2021-06-17 09:29:03
【问题描述】:

在 C# 中,我正在制作组合逻辑,但由于某种原因,我不知道如何将示例中的 ConnectOutput 方法设置为与门。

这是我得到的唯一描述:将此组件的输出连接到另一个组件的输入。 允许从同一输出到其他输出引脚的多个连接

public class AndGate : ILogicComponent
    {
        bool value0;
        bool value1;


        public void ConnectOutput(int outputPin, ILogicComponent other, int inputPin)
        {
            throw new NotImplementedException();
        }

        public bool GetInput(int pin)
        {
            if (pin != 0 && pin != 1)
            {
                throw new InvalidPinException(pin + " is not a valid input pin for AND");
            }
            if(pin == 0)
            {
                return value0;
            }

            return value1;       
        }

        public bool GetOutput(int pin)
        {
            if (pin != 0 && pin != 1)
            {
                throw new InvalidPinException(pin + " is not a valid input pin for AND");
            }
            return value0 & value1;
        }

        public void SetInput(int pin, bool value)
        {
            if(pin != 0 && pin != 1)
            {
                throw new InvalidPinException(pin + " is not a valid input pin for AND");
            }
            if(pin == 0)
            {
                value0 = value;
            }
            if(pin == 1)
            {
                value1 = value;
            }
        }
    }
}

【问题讨论】:

    标签: c# logic logical-operators


    【解决方案1】:

    对于发布的架构,没有真正的方法来连接组件。当“其他”组件更改值时,AndGate 无法知道或更新其值。

    有两种主要方法可以解决此问题:

    1. 仅按需计算值
    2. 当组件更改值时,它会通知依赖其值的所有组件应该更新它们。

    第一种方法更容易实现,但每次需要输出时都需要更新所有值。第二种方法可以允许按需和部分更新。

    第一种方法的一个例子可能是这样的:

    public interface IComponent
    {
        bool Value { get; }
    }
    
    public class AndComponent : IComponent
    {
        private readonly IComponent[] input;
        public AndComponent(params IComponent[] input) => this.input = input;
        public bool Value => input.All(i => i.Value);
    }
    public class OrComponent : IComponent
    {
        private readonly IComponent[] input;
        public OrComponent(params IComponent[] input) => this.input = input;
        public bool Value => input.Any(i => i.Value);
    }
    public class InputComponent : IComponent
    {
        public bool Value { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2010-11-14
      • 2019-08-19
      • 2013-02-19
      • 2016-01-20
      • 2019-12-30
      • 2022-08-21
      相关资源
      最近更新 更多