Estoy escribiendo software ATM para entrenar la programación orientada a objetos y tengo la clase Pin con un método VerifyPin.

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


}

Estoy tratando de llamar a este método dentro de otras clases para verificar el PIN que está almacenado dentro de la Tarjeta, así como en la Cuenta.

Hasta ahora se me ocurrió una idea para hacer algo como esto, pero estoy seguro de que hay una manera mejor

    class Card
{
    private Pin _pin;

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

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

Cualquier fuente para aprender más sobre el tema también será bienvenida.

1
user5848956 28 ene. 2016 a las 00:15

3 respuestas

La mejor respuesta

Yo diría que el pin debe estar encapsulado en una Cuenta, pero no en una Tarjeta. Una tarjeta estaría asociada a una cuenta. Entonces, para verificar un pin cuando se le da una tarjeta, debe llamar al siguiente código:

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

(Un método estático no funciona porque no puede acceder al campo _pin).

0
kristianp 29 ene. 2016 a las 05:49

Este método puede volverse estático. De esta manera se podría acceder y usar desde cualquier clase en el mismo proyecto, pero parece que le gustaría crear un objeto pin y luego llamar a ese método de objeto: VerifyPin que tomará el pin que desea validar como parámetro

2
user5326354user5326354 27 ene. 2016 a las 21:22

Si hace que el método VerifyPin sea estático, puede llamarlo sin crear una instancia de la clase Pin.

public static bool VerifyPin(int pin){}

Pin.VerifyPin(pin);
0
Erik Karlstrand 27 ene. 2016 a las 21:22