实现基本方法,但仍然提供自己的实现?

时间:2013-10-07 09:27:14

标签: c# .net parsing abstract-class dry

要解析两个字符串:

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的解析。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

使基本方法虚拟而不是抽象。然后你可以在实现类中调用base.Parse(string)。

编辑:哦,不要让它们静止。看起来您希望创建类的实例。

示例:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx