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

本文关键字:对象 动态 一个 返回 | 更新日期: 2023-09-27 18:11:11

我正在努力寻找最好的方法来做到这一点:

我有一个抽象类A和许多具体的派生类,我们称它们为D1..DN。每个派生类都需要一个方法,该方法接受一个字符串,对其进行解析,并根据具体的类返回类型。所以,因为我不知道在抽象类的返回类型,我不能正常定义函数。我找到的是动态关键字,我可以这样写:

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

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

编辑:糟糕的设计,应该重新考虑这个问题,找到一个更好的方法来处理多态性。打扰你了。在最坏的情况下,我将使用返回对象和数百万行if

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

您正在寻找泛型:

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

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

public abstract object Parse(string s);

则子类可以返回任何它们喜欢的....但这通常是一个糟糕的设计。

协方差和逆变概念可能起作用:

    public abstract BaseClass Parse(string s);

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