Sto leggendo un codice in C# che utilizza due costruttori. Uno è statico e l'altro è pubblico. Qual è la differenza tra questi due costruttori? E per quello che dobbiamo usare costruttori statici?Costruttore pubblico e costruttore statico
risposta
static
e public
sono concetti ortogonali (vale a dire che non hanno nulla a che fare l'uno con l'altro).
public
significa semplicemente che gli utenti della classe possono chiamare tale costruttore (al contrario, per esempio, private
).
static
significa che il metodo (in questo caso il costruttore) non appartiene a un'istanza di una classe ma alla "classe stessa". In particolare, un costruttore statico è chiamato una volta, automaticamente, quando la classe viene utilizzata per la prima volta.
Inoltre, non è possibile eseguire un costruttore statico public
o private
poiché non può essere chiamato manualmente; è chiamato solo dal runtime .NET stesso, quindi contrassegnarlo come public
non sarebbe significativo.
Static Constructor ... È garantito che venga chiamato "una volta" per tutta la durata dell'app/app Domain. Può contenere istruzioni che si desidera eseguire solo una volta.
Costruttore pubblico ... Poiché non è possibile aggiungere modificatori di accesso a un costruttore statico, un costruttore pubblico significa che si sta parlando di un costruttore di istanze. Se un costruttore di istanze è pubblico, il mondo esterno può creare le sue istanze. Altre opzioni sono Interne (può essere richiamato dall'interno della libreria), Privato (solo all'interno della classe).
Il costruttore statico viene eseguito solo una volta, prima dell'istanza della classe. È usato se vuoi che succeda qualcosa solo una volta. Un bel esempio potrebbe essere una classe Bus (simile a qualcosa spiegano in MSDN article):
public class Bus
{
public static int busNo = 0;
static Bus()
{
Console.WriteLine("Woey, it's a new day! Drivers are starting to work.");
}
public Bus()
{
busNo++;
Console.WriteLine("Bus #{0} goes from the depot.", busNo);
}
}
class Program
{
static void Main(string[] args)
{
Bus busOne = new Bus();
Bus busTwo = new Bus();
}
// Output:
// Woey, it's a new day! Drivers are starting to work.
// Bus #1 goes from the depot.
// Bus #2 goes from the depot.
}
Mi piace grazie alla prima linea chiara: semplice e senza complicazioni! –
Statico Constructor
Un costruttore dichiarato utilizzando il modificatore statico è un costruttore statico. Un costruttore statico viene utilizzato per inizializzare i dati statici o per eseguire una determinata azione che deve essere eseguita solo una volta nel ciclo di vita della classe. Il costruttore statico è il primo blocco di codice da eseguire in classe. Il costruttore statico esegue una sola volta nel ciclo di vita della classe. Si chiama automaticamente. Il costruttore statico non accetta alcun parametro. Non ha specificatori di accesso. Non è chiamato direttamente.
grado o pubblici costruttore
costruttore di istanza viene utilizzato per inizializzare i dati di istanza. Il costruttore di istanze viene chiamato ogni volta che viene creato l'oggetto della classe. Si chiama esplicitamente. Il costruttore di istanze prende i parametri. Ha specificatori di accesso.
- 1. Eccezione nel costruttore statico
- 2. C# statico generico costruttore
- 3. Costruttore statico in VB.NET
- 4. Costruttore privato e costruttore parametri pubblici
- 5. Costruttore statico per l'intero assieme
- 6. Come funziona un costruttore statico?
- 7. Costruttore statico chiamato dopo il costruttore di istanze?
- 8. Classe sigillata - Perché rimuovere il Costruttore pubblico?
- 9. Perché il costruttore di java.io.FileDescriptor è pubblico?
- 10. Il costruttore statico può essere eseguito dopo il costruttore non statico. È un bug del compilatore?
- 11. Equivalente costruttore statico in Objective-C?
- 12. Tipo inizializzatore (costruttore statico) gestione delle eccezioni
- 13. costruttore statico non funziona per le strutture
- 14. attuazione Singleton con costruttore statico vuoto
- 15. Condizioni di gara nel costruttore statico C#
- 16. inizializzatore di campo statico readon vs inizializzazione del costruttore statico
- 17. C'è un costruttore statico o un inizializzatore statico in Python?
- 18. costruttore o copia costruttore?
- 19. Argomenti costruttore costruttore ES6
- 20. pubblico statico vs pubblico statico - c'è una differenza?
- 21. Il costruttore di copia deve essere privato o pubblico
- 22. AssertionFailedError: <class> non ha costruttore pubblico
- 23. Una classe può avere un costruttore sia pubblico che privato?
- 24. cosa fa un costruttore pubblico su una classe interna significa
- 25. Perché l'implementazione di Externalizable richiede un costruttore pubblico predefinito?
- 26. È un costruttore pubblico in una classe astratta un codesmell?
- 27. Metodo statico per creare un oggetto invece di costruttore
- 28. Come si richiama un costruttore statico con riflessione?
- 29. Come fa C# a sapere quando eseguire un costruttore statico?
- 30. Il codice nel costruttore statico funziona più lentamente
È possibile chiamare un costruttore statico una sola volta? Cosa succede se il tipo non viene mai utilizzato all'interno del ciclo di vita di un'app? – MPritchard
@MPritch, hai ragione in tal caso non verrà chiamato. Ma io non devo nemmeno preoccuparmi delle cose che una classe sta facendo (o non sta facendo) se non sto usando (o riferendola) da nessuna parte nella mia applicazione, rito? –
che tutto dipende da cosa stai facendo nel costruttore – MPritchard