要解析两个字符串:
param1=value1;param2=value2;param3=value3;
和...
param1=value1;param4=value4;param999=value999;
每个参数都必须进行不同的解析,因为它们包含不同类型的复杂信息。在神圣DRY范式的所有荣耀中,解析“param1
”只进行一次似乎是恰当的。基类实现可能如下所示:
public abstract class MyBase {
public ComplexObj MyParam1 { get; set; }
public abstract static MyBase Parse(string myString) {
// some sinful witchcraft that parses the value
// of param1 into the ComplexObj MyParam1
// and returns an instance of MyBase
}
}
,派生类可能如下所示:
public class MyDerived : MyBase {
public ComplexObj2 MyParam2 { get; set; }
public ComplexObj3 MyParam3 { get; set; }
public static MyDerived Parse(string myString) {
params = myString.Split('params/values')
base.Parse(params[0]);
MyParam2 = magicParseParam2[1];
MyParam3 = magicParseParam3[2];
}
}
现在,这显然不起作用,因为我将基类的Parse()
方法声明为abstract,强制每个派生类提供自己的方法实现。但在这种特殊情况下,我不想为每个实现编写param1
的解析。
我该如何解决这个问题?
答案 0 :(得分:2)
使基本方法虚拟而不是抽象。然后你可以在实现类中调用base.Parse(string)。
编辑:哦,不要让它们静止。看起来您希望创建类的实例。