簡體   English   中英

C#:抽象類中的抽象和非抽象方法?

[英]C#: abstract and non-abstract methods in an abstract class?

我不確定我寫的代碼是否有意義。 這是一般的想法:

我有一個Parser類,它將采用不同類型的文檔。 根據類型,我將以不同方式解析文檔。

因此,假設我有兩種類型的文檔,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
{
   ...
}

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

這不標准嗎? 也許有更好的方法來設計它?

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

這非常好,您甚至可以制作一些非必須覆蓋的virtual方法

這是模板方法模式的典型實現。 您提供算法的一般模式,但詳細信息在具體類中實現。

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

您還應該知道,因為您的Parser類是抽象的,所以可以訪問common_method的唯一方法是通過A_Parser或B_Parser類的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM