Dois-je sceller toutes les classes que je connais ne devrait jamais être utilisé comme classe de base?

Dois-je sceller toutes les classes que je connais ne devrait jamais être utilisé comme classe de base, même s’il n’y a pas de problèmes de performance ou de sécurité tangibles, ou est-ce que cela ne fait qu’append du temps?

Une classe extensible implémente la fonctionnalité qu’elle peut être étendue – c’est une fonctionnalité comme toute autre fonctionnalité de la classe, et doit être traitée comme telle, non différente d’une méthode. Toutes les fonctionnalités doivent être soigneusement étudiées pour s’assurer qu’elles répondent aux objectives du client qui utilise la fonctionnalité. Les fonctionnalités doivent être conçues, mises en œuvre, examinées pour des problèmes de sécurité, déboguées, documentées et gérées.

Tout cela coûte de l’effort, et les efforts exigent généralement des dépenses. A qui dépenses-tu l’argent? Ils pourraient avoir une opinion sur le fait de savoir si vous devez ou non faire cette fonctionnalité.

En gros, vous avez trois choix:

1) Dépensez de l’argent pour faire cette fonctionnalité afin de vous assurer qu’elle est correcte, robuste, sécurisée et répond aux besoins des utilisateurs.

2) Ne faites rien de ce qui précède mais expédiez la fonctionnalité de toute façon et espérez que l’envoi d’une fonctionnalité non signée, rapidement implémentée, non testée, non documentée et non maintenue avec des risques de sécurité inconnus ne vous nuise pas, votre employeur ou vos clients.

3) Scellez la classe. Détachez-le plus tard si vous trouvez que (1) était le bon choix.

Je dis que (3) est un bon rapport qualité-prix. Je scelle toujours chaque classe que j’écris qui n’a pas été conçue pour l’extensibilité.

Définir une classe à sealed n’est pas inutile, car cela définit une règle ssortingcte dans votre code: cette classe ne peut pas être héritée.

Le code n’est que cru s’il est inutile et déroutant.

Cela dit, une école de pensée (et une règle simple) est que vous devez toujours sceller toutes les classes car il est facile de les ouvrir si nécessaire, mais pas l’inverse. Certains générateurs de code le font automatiquement. (Voir l’option n ° 3 d’Eric Lippert ci-dessus. Il dit essentiellement la même chose.)

Je ne le considérerais pas comme un ajout brutal. Au lieu de cela, vous exprimez clairement vos intentions pour le cours.

Les classes doivent être conçues pour l’inheritance ou être scellées. Malheureusement, les classes ne sont pas scellées par défaut en C #, vous devez donc inclure le mot-clé vous-même. Personnellement, j’aurais préféré qu’un mot clé crée explicitement des classes pour l’inheritance, car cela empêcherait les gens d’utiliser une classe en tant que classe de base, à moins qu’elle soit explicitement marquée comme telle.

Oui. Si rien d’autre est un panneau indiquant aux autres qu’ils ne devraient pas aller plus loin sur la piste.