一些朋友正在討論繼承的使用以及如何檢查子類是否屬於特定類型,並且我們決定將它在此處發佈在Stack上。辯論的是如果你應該在基類中實現一個抽象枚舉來檢查子類的類型,或者你應該使用is運算符。子類檢查,是運算符還是枚舉檢查
備選1
public abstract class Document{
}
public class PDF:Document{
}
Check: If (myobj is PDF)
Alt鍵2.
public abstract class Document{
public abstract DucumentType TypeOfDocument {get;}
}
public class PDF:Document{
public DucumentType TypeOfDocument { get{return DucumentType.PDF };}
}
public enum DucumentType{
PDF, Word
}
Check: If (myobj.TypeOfDocument == DucumentType.PDF)
的那些爲ALT1。認爲Alt2略微打破SRP,你不會利用OO,你重複抽象。因爲繼承是類之間最難聯繫的事情,所以你無法避免知道它們,並且如果你必須通過繼承來減少影響。 Alt2也打破DRY
對於Alt2的那些,Alt2將完全刪除類型檢查,並將它替換爲檢查此枚舉的選項。去除所有子類的所有硬連接,並且枚舉本身的值並沒有說明當前正在執行哪個具體實現。
你對這兩種選擇有什麼看法?
沒有討論繼承與組合等,這是另一個問題!