2013-10-07 76 views
0

有2串解析:實現基本方法,但仍提供自己的實現?

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()方法類作爲抽象,強制每個派生類提供它自己的方法實現。但在這種特殊情況下,我不想爲每個實現寫出param1的解析。

我該如何解決這個問題?

+0

有沒有這樣的事情作爲抽象的靜態方法與實現。 (1)抽象方法沒有實現(2)靜態方法不能抽象或虛擬。 –

回答

2

使基本方法變爲虛擬而不是抽象。然後你可以在實現類中調用base.Parse(string)。

編輯:呵呵,不要讓它們變成靜態的。它看起來像你想要做什麼,你想創建一個類的實例。

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

+0

爲什麼當然! '公衆愚蠢的我{}' – Acrotygma