返回一个变量对象(动态?)

时间:2013-04-29 02:38:43

标签: c# dynamic return-value

我正在努力寻找最佳方法:

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

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

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

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

3 个答案:

答案 0 :(得分:3)

您正在寻找泛型:

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

abstract class ThingyParser : ParserBase<Thingy> {
    public override Thingy Parse(string input);
}

答案 1 :(得分:1)

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

public abstract object Parse(string s);

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

答案 2 :(得分:0)

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

    public abstract BaseClass Parse(string s);

所以,如果你返回从base继承的任何类型,不会有问题。