首先,明白为什么C#不会让您在银行账户列表中执行此操作。
如果您有各种银行账户,那么无论你做的列表中的任何人需要适用于他们中的每一个。你不能在一个对象上调用一个方法,除非该对象保证有该方法。静态类型系统是尽可能早地提醒你的。
话虽这么说,如果你真的知道你只有银行账户种类屈指可数,你也许可以单独列举出来:
foreach(var account in accounts.OfType<VistaAccount>())
{
// call methods specific to "Vista" accounts
}
foreach(var account in accounts.OfType<OtherAccount>())
{
// call methods specific to "Other" accounts
}
现在记住,这种方法并不能很好地扩展在长期。如果将来引入更多亚型,您可能需要回到那个位置并添加更多特殊情况。
如果您想要在每个帐户上执行特定的操作,并且该操作的详细信息因每种帐户类型而异,则有更好的方法来执行此操作。只需用你的基地的银行帐户类型声明一个抽象方法:
public abstract void Operation();
然后实现(override
)这种方法在每个帐户的种类,具体到那种指令。
- 从长远来看,这可以很好地扩展,因为您不必在每次引入更多账户类型时都引入特殊情况。还有一件事是为未来的自己或代码的未来维护者记录。
- 它更方便,因为如果你忘记指定子类型的操作,你会在编译时得到一个好消息。所以如果你忘记这么做的话,那就有一个很好的安全网。
- 因为现在每种银行账户都支持该操作,所以编译器会很乐意让您在银行账户列表中拨打电话。您不需要我最初提出的手动类型检查。
发布类声明的代码。方法是公开的吗? –
是的,每个类的构造函数和方法都是公共的。 –