如何制作ConnectOutput



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

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

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;
}
}
}
}

在发布的体系结构中,没有真正的方法来连接组件。当"其他"组件更改值时,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; }
}

相关内容

  • 没有找到相关文章

最新更新