簡體   English   中英

抽象類中沒有公共成員

[英]No public members in abstract class

我正在構建一些與HTTP Web服務交互的代碼。 要與它交互,可以使用HTTP GET請求或使用HTTP POST在其上調用“命令”。

我想創建一個封裝和隱藏HttpWebRequest對象的基類(例如,ServiceCommand),但我不相信我希望它公開提供任何功能,只提供給子類。

子類可以是(例如)SearchCommand或FetchCommand,它們將使用基類中受保護方法提供的功能。

基本上,我的問題是:創建只有受保護成員的類而不是公共成員的類被認為是不好的設計。

一般問題我問自己設計:

  • 它是什么,這一 請記住,面向對象的設計是關於對象的。 如果要創建新對象,則需要將其視為一個單獨的實體(至少是抽象的)。 如果您只是提供功能,那么最好創建一個接口或擴展方法。
  • 這個功能是否已經存在? 無需創建一個類來包裝一個運行良好的類。
  • 最后是私有與公共 - 如果您認為子類需要訪問基類值,則創建受保護的成員變量。 無論您是否在基類中擁有公共屬性,此變量都將起作用。 執行此操作后 - 如果您認為該值在外部有用,則可以在基類中添加get / set。 這最終看起來像:

     public abstract class BaseClass { protected object _member; public object MemberGet { return _member; } } public class InheritClass : BaseClass { // now the base class can "decide" to set the member or implement its own set rules public static void RoutineThatSetsMember(object value) { _member = value; } } 

我不確定這些是每個人都使用的規則,但也許它會對一般設計有幫助(或者至少讓對話繼續前進)!

這是關於“是A”和“有A”之間的區別的問題。

關於“是A”,如果B類繼承自接口A或A類,則意味着B是A的一種類型,B應該具有與A相同的行為,而這些行為由公共成員函數定義。

由於“有A”,B類只想使用A類的實現,因此B將保持對A的引用,而不是繼承自A。

所以對於你的情況,這是一個“有A”的關系。

暫無
暫無

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

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