我正在努力寻找最佳方法:
我有一个抽象类A,许多具体的派生类,我们称之为D1..DN。 每个派生类都需要一个方法,它接受一个字符串,解析它,并根据它是哪个具体类返回一个类型。因为我不知道Abstract类中的返回类型,所以我无法正常定义函数。 我发现的是动态关键字,我可以这样:
public dynamic Parse();在我的抽象课中 然后每个具体的类都可以覆盖它并返回他们想要的任何类型,但是,在应用程序上使用这个我想知道哪个是返回的类型所以这不是很好。
还有其他选择吗?更糟糕的情况是没有做多态,并且在我的主应用程序上询问一个巨大的抽象类if if检查它是什么类并相应地设置返回类型。
编辑:糟糕的设计,应该重新思考问题并找到一个更好的多态方法。抱歉你的时间:)。在最坏的情况下,我将使用返回对象和数百万行ifs答案 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继承的任何类型,不会有问题。