如何从它的 class 中提取方法以便在许多地方重用它并保持封装?

How to extract method from its class in order to reused it in many places and keep encapsulation?

我正在编写 ATM 软件以训练面向对象的编程,并且我使用 VerifyPin 方法获得了 Pin class。

    class Pin
{
    private int _pin;

    public void ChangePin (int newPin)
    {
        if (newPin.ToString().Length != 4)
        {
            throw new ArgumentException("PIN must be exactly 4 digits long");
        }

        _pin = newPin;
    }

    public bool VerifyPin (int pin)
    {
        return (_pin == pin);
    }


}

我正在尝试在其他 classes 中调用此方法,以验证存储在 Card 和 Account 中的 PIN。

到目前为止,我想出了做这样的事情的想法,但我确信有更好的方法

    class Card
{
    private Pin _pin;

    public Card(Pin pin)
    {
        this._pin = pin;   

    public bool VerifyPin (int pin)
    {
        return this._pin.VerifyPin(pin);
    }
}

也欢迎提供有关该主题的更多信息的任何来源。

如果您将 VerifyPin 方法设为静态,则可以在不创建 Pin 实例的情况下调用它 class。

public static bool VerifyPin(int pin){}

Pin.VerifyPin(pin);

这个方法可以静态化。这样就可以从同一项目中的任何 class 访问和使用它, 但似乎您想创建一个 pin 对象,然后调用该对象方法:VerifyPin,它将您要验证的 pin 作为参数

我会说pin码应该封装在Account中,而不是Card中。一张卡将与一个帐户相关联。因此,要在给定卡片时验证密码,您可以调用以下代码:

bool verified = myCard.Account.VerifyPin(pin);

(静态方法不起作用,因为它无法访问字段_pin)。