Un couple d'amis discutait l'utilisation de l'héritage et comment vérifier si une sous-classe est d'un type spécifique et nous avons décidé de le publier ici sur la pile. Le débat portait sur le fait de savoir si vous devez implémenter une énumération abstraite dans la classe de base pour vérifier le type de la sous-classe ou si vous devez utiliser l'opérateur is.chèque sous-catégorie, est chèque opérateur ou ENUM
Alt 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)
ceux pour Alt1. ment que Alt2 brise légèrement la SRP, vous ne profitez pas de OO, votre répétition de l'abstraction. Puisque l'héritage est la connexion la plus difficile entre les classes, vous ne pouvez pas éviter de les connaître, et si vous devez passer par l'héritage, minimisez l'impact. Alt2 brise aussi SECS
Ceux pour alt2 MENT que alt2 enlèvera le type de vérification entièrement et le remplacer par la possibilité de vérifier cette ENUM à la place. Suppression de toutes les connexions à toutes les sous-classes, et la valeur de l'énumération elle-même ne dit rien sur la mise en œuvre concrète qui est en cours d'exécution.
Quelle est votre opinion sur les deux alternatives?
Aucune discussion sur l'héritage par rapport à la composition, etc., c'est une autre question!