2010-02-22 19 views
5

Ho una classe, il cui stub è mostrato di seguito. L'analisi del codice è critica se non rimuovo il costruttore pubblico. Ma sono curioso perché questo è necessario in una classe sigillata? La particolare classe mostrata di seguito contiene solo metodi statici. Perché sarebbe buona norma includere un costruttore privato solo per rimuovere quello pubblico?Classe sigillata - Perché rimuovere il Costruttore pubblico?

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

risposta

11

Non si ottiene questo avviso perché la classe è sigillata, ma perché è (effettivamente) una classe statica.

Un costruttore pubblico implica che la classe abbia metodi di istanza - classi che non dovrebbero non pubblicizzare altrimenti.

6

Se si dispone di una classe che ha solo metodi condivisi, perché è necessario creare un'istanza di esso?

Un esempio di una classe con solo metodi condivisi , è la classe System.Math. È ha un costruttore privato, in quanto aggiunge nessun vantaggio (e non ha senso) per per essere creabile.

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

La domanda è: perché dovrei renderlo privato, ma perché dovrebbe rimanere pubblico. Assegna sempre l'accesso minimo richiesto.

+1

Hai dimenticato di includere il link sorgente: http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/8addbc70-f720-4d0b-85ce-2bdf52e32f77 –

+1

true (arrossire) ... Ancora c'è un po 'anche da parte mia ... – anthares

14

Se esistono solo metodi statici, dichiararlo come una classe statica e non preoccuparti dei costruttori.

public static class ParseFile 
{ 
} 
2

Una classe con tutti i metodi statici non ha mai bisogno di un costruttore in quanto non viene istanziata con una nuova parola chiave. Quindi non hai bisogno di un costruttore pubblico.

3

Sigillato non è lo stesso di Statico. Una classe statica indica che non è possibile creare un'istanza di una classe con la nuova parola chiave. Una classe sigillata significa che non puoi creare una classe che ne erediti.

+0

Buon punto. L'ho trascurato. –

+2

Forse lo sapete già, ma 'static' è lo zucchero C# per dichiarare una classe' abstract sealed'. :) Le specifiche del linguaggio C# aggiungono la restrizione aggiuntiva che il tipo contiene solo membri statici a causa del fatto che i membri dell'istanza di un tipo astratto sigillato non potrebbero mai essere richiamabili. –

+0

@ 280Z28 sei sicuro ?? Ho provato a dichiarare una classe astratta sigillata e ho ottenuto un errore di compilazione dicendo che una classe astratta non può essere sigillata o statica – Pedro

Problemi correlati