0

我试图找到最好的方法来做到这一点:

我有一个抽象类 A 和许多具体的派生类,我们称它们为 D1..DN。每个派生类都需要一个方法,该方法接受一个字符串,解析它,并根据它是哪个具体类返回一个类型。所以由于我不知道抽象类中的返回类型,我无法正常定义函数。我发现的是动态关键字,我可以这样:

公共动态 Parse(); 在我的抽象类中然后每个具体类都可以覆盖它并返回他们想要的任何类型,但是,在使用它的应用程序上,我想知道哪个是返回的类型,所以这根本不好。

还有其他选择吗?更糟糕的情况是不做多态性,在我的主应用程序上询问抽象类是否检查它是什么类并相应地设置返回类型。

编辑:糟糕的设计,应该重新考虑问题并找到更好的多态方法。对不起你的时间:)。在最坏的情况下,我将使用返回对象和数百万行使用 ifs

4

3 回答 3

3

您正在寻找泛型:

abstract class ParserBase<T> {
    public abstract T Parse(string input);
}

abstract class ThingyParser : ParserBase<Thingy> {
    public override Thingy Parse(string input);
}
于 2013-04-29T02:40:21.480 回答
1

如果你想返回任何类型的对象,你可以

public abstract object Parse(string s);

然后子类可以返回他们喜欢的任何东西......但通常这将是一个糟糕的设计。

于 2013-04-29T02:54:34.650 回答
0

协方差和逆变概念可能有效:

    public abstract BaseClass Parse(string s);

因此,如果您返回从基类继承的任何类型,则不会有问题。

于 2013-04-29T03:08:57.517 回答