如何从它的 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
)。
我正在编写 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
)。