La portata internal class
sostituisce il costruttore portata public MyClass()
, rendendo il costruttore internal
.
L'utilizzo di public
nel costruttore semplifica l'aggiornamento della classe a public
in seguito, ma confonde l'intento. Io non lo faccio
Modifica 3: ho perso parte della domanda. Va ancora bene farlo se la tua classe è annidata. L'annidamento non può fare alcuna differenza, anche se è annidato in una classe privata in una classe pubblica in un ... (vedi C# language specification - 3.5.2 Accessibility domains).
EDIT: E, se ricordo, se ctor è internal
, non può essere usato come un tipo generico in cui v'è un vincolo che richiede where T : new()
, ciò richiederebbe un public
costruttore (. Ref C# language specification (version 4.0) - 4.4.3 Bound and unbound types) .
Edit 2: Esempio di codice dimostrando quanto sopra
class Program
{
internal class InternalClass {
internal InternalClass() { }
}
internal class InternalClassPublicCtor {
public InternalClassPublicCtor() { }
}
internal class GenericClass<T>
where T : new() {}
static void Main(string[] args) {
GenericClass<InternalClass> doesNotCompile = new GenericClass<InternalClass>();
GenericClass<InternalClassPublicCtor> doesCompile = new GenericClass<InternalClassPublicCtor>();
}
}
fonte
2013-05-11 18:53:46
Se si crea un UserControl interno con un costruttore interno, la finestra di progettazione di Win Form si comporterebbe in modo anomalo. – DaveShaw
Pensa al modificatore di accesso sulla classe come a una sorta di "interruttore principale" che imposta l'accessibilità * massima * di tutti i membri della classe. –
@ChrisMcGrath. In generale, sarei d'accordo, anche se questa domanda fa anche domande sulla nidificazione delle classi (e l'ho perso durante la mia prima lettura, quindi l'ho affrontata in una modifica alla mia risposta). –