好的,我正在做一个关于“购物中心”的模拟,我有许多类在相同的“水平”,这与每个人的个性相对应。例如,我有一个类:小丑,小偷,刺客,物质主义者,等等,在同一级别和一个父亲类称为客户。在Client类中,我有一些用于吃饭、行走等的方法,每个特定的类都有一个特定的方法,小偷偷窃,刺客杀死等。我想知道如何将每个"client“放在一个列表中,同时仍然强制转换每个特定的方法?
发布于 2012-03-28 07:26:20
也许你应该这样做:
public abstract class Client
{
public void Eat() { /* some implementation */ }
public void Walk() { /* some implementation */ }
public abstract void TypeSpecificAction();
}
public class Thief
{
public overeride void TypeSpecificAction() { Steal(); }
public void Steal() { /* some implementation */ }
}
public class Assassin
{
public overeride void TypeSpecificAction() { Assassinate(); }
public void Assassinate() { /* some implementation */ }
}然而,这只在一些有限的情况下有效。一般来说,这个问题的解决方案是向下转换,正如usr回答的那样。
发布于 2012-03-28 07:20:46
这将需要一个运行时转换。您可以将列表类型化为List<Client>,并在访问列表时进行强制转换。然而,这并不是一个特别可靠的设计。如果你的客户端足够不同,以至于你需要在运行时转换它们,我会问你为什么要使用继承。
https://stackoverflow.com/questions/9899062
复制相似问题