2010-02-22 6 views
5

J'ai une classe, dont le talon est montré ci-dessous. L'analyse de code blesse si je ne supprime pas le constructeur public. Mais je suis curieux de savoir pourquoi cela est nécessaire sur une classe scellée? La classe particulière représentée ci-dessous contient uniquement des méthodes statiques. Pourquoi serait-il une bonne pratique d'inclure un constructeur privé juste pour supprimer le constructeur public?Classe scellée - Pourquoi supprimer le constructeur public?

public sealed class ParseFile 
    { 
     /// <summary> 
     /// Remove the public constructor to satisfy CA1053. 
     /// </summary> 
     private ParseFile() 
     { 
     } 
    } 

Répondre

11

Vous n'êtes pas obtenir cet avertissement parce que la classe est scellé, mais parce qu'il est (effectivement) une classe statique.

Un constructeur public implique que la classe a des méthodes d'instance - des classes qui ne devraient pas faire de publicité autrement.

6

Si vous avez une classe qui ne dispose que méthodes partagées, pourquoi avez-vous besoin de créer une instance de celui-ci?

Un exemple de classe avec seulement des méthodes partagées est la classe System.Math. Il a un constructeur privé, car il ajoute aucun avantage (et cela n'a aucun sens) pour qu'il soit créable.

EDIT: Source http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/8addbc70-f720-4d0b-85ce-2bdf52e32f77

La question est pourquoi devrais-je le rendre privé, mais pourquoi devrait rester publique. Accordez toujours l'accès minimum requis.

+1

Vous avez oublié d'inclure le lien source: http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/8addbc70-f720-4d0b-85ce-2bdf52e32f77 –

+1

true (blush) ... Encore il y a un peu de moi aussi .... – anthares

14

S'il n'y a que des méthodes statiques, déclarez-le comme une classe statique et arrêtez de vous soucier des constructeurs.

public static class ParseFile 
{ 
} 
2

Une classe avec toute méthode statique n'a jamais besoin d'un constructeur car elle n'est pas instanciée avec un nouveau mot-clé. Vous n'avez donc pas besoin de constructeur public.

3

Scellé n'est pas la même chose que Statique. Une classe statique signifie que vous ne pouvez pas créer une instance d'une classe avec le nouveau mot-clé. Une classe scellée signifie que vous ne pouvez pas créer une classe qui en hérite.

+0

Bon point. J'ai oublié ça. –

+2

Vous le savez peut-être déjà, mais 'static' est du sucre C# pour déclarer une classe' sealed abstract'. :) La spécification de langage C# ajoute la restriction supplémentaire selon laquelle le type ne contient que des membres statiques du fait que les membres d'instance d'un type abstrait scellé ne seront jamais appelables. –

+0

@ 280Z28 es-tu sûr? J'ai essayé de déclarer une classe abstraite scellée et j'ai obtenu une erreur de compilation disant qu'une classe abstraite ne peut pas être scellée ou statique – Pedro

Questions connexes