一些朋友正在讨论继承的使用以及如何检查子类是否属于特定类型,并且我们决定将它在此处发布在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将完全删除类型检查,并将它替换为检查此枚举的选项。去除所有子类的所有硬连接,并且枚举本身的值并没有说明当前正在执行哪个具体实现。
你对这两种选择有什么看法?
没有讨论继承与组合等,这是另一个问题!