班级互动

时间:2012-03-27 23:16:11

标签: c# class simulation

好的,所以我正在做一个关于“购物中心”的模拟我在同一“级别”中有许多课程,这对应于每个人的个性。 例如,我有同一级别的小丑:小丑,小偷,刺客,唯物主义者等 还有一个名为Clients的父类。在Client类中,我有一些吃饭,走路等方法,每个特定的类都有一个特定的方法,窃贼窃取,刺客杀戮等。 我想知道如何将每个“客户”放在一个列表中并仍然投射每个特定的方法?

2 个答案:

答案 0 :(得分:0)

这将需要运行时强制转换。您可以将列表键入为List<Client>,并在访问列表时执行强制转换。然而,这不是一个特别坚固的设计。如果您的客户端足够不同以至于需要在运行时投射它们,我会问你为什么要使用继承。

答案 1 :(得分:0)

也许你应该这样做:

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 */ }
}

但这仅适用于某些有限的情况。一般来说,这个问题的解决方案是向下转换,正如我们回答的那样。