2012-06-08 258 views
2

我不確定我寫的代碼是否合理。這裏的一般想法:C#:抽象類中的抽象和非抽象方法?

我有一個解析器類將採取不同類型的文件。根據類型,我將以不同的方式解析文檔。

所以假設我有兩種類型的文件,A和B.工廠模式似乎是一個很好的方式去做這件事情,因爲我需要擴展程序來處理額外的類型,所以我將有一個摘要類。

abstract class Parser 
{ 
    ... 
    public void common_method() { 
     // something common that all parsers will use 
     // like file IO 
    } 

    // derived classes will override this 
    public abstract void specific_method(); 
} 

class A_Parser : Parser 
{ 
    ... 
} 

class B_Parser : Parser 
{ 
    ... 
} 

我想知道的問題是,我在抽象解析器中聲明瞭抽象方法和非抽象方法。編譯器似乎沒有抱怨,它似乎仍然正常工作。

這是不是標準?也許有更好的方法來設計這個?

回答

7

這很好。如果你只有抽象方法,你基本上會有一個接口。如有必要,您可能需要使用其他模式來創建解析器的實際實例,但就類定義而言,這是非常標準的。

2

這是很細的,你甚至可以做一些virtual方法,這些方法不是強制性的覆蓋

2

這是Template Method Pattern的典型應用。您提供了算法的一般模式,但細節在具體的類中實現。

0

在抽象類中有非抽象方法是很常見的。

你也應該知道,因爲你的解析器類是抽象的,唯一可以訪問common_method的方法是通過A_Parser或B_Parser類的實例。