Ich lese einen Code in C#, der zwei Konstruktoren verwendet. Einer ist statisch und der andere ist öffentlich. Was ist der Unterschied zwischen diesen beiden Konstruktoren? Und für was müssen wir statische Konstruktoren verwenden?Öffentlicher Konstruktor und statischer Konstruktor
Antwort
static
und public
sind orthogonale Konzepte (d. H. Sie haben nichts miteinander zu tun).
public
bedeutet einfach, dass Benutzer der Klasse diesen Konstruktor aufrufen können (im Gegensatz zu beispielsweise private
).
static
bedeutet, dass die Methode (in diesem Fall der Konstruktor) nicht zu einer Instanz einer Klasse gehört, sondern zur "Klasse selbst". Insbesondere wird ein statischer Konstruktor einmal automatisch aufgerufen, wenn die Klasse zum ersten Mal verwendet wird.
Darüber hinaus kann ein statischer Konstruktor nicht public
oder private
gemacht werden, da es nicht manuell aufgerufen werden kann; Es wird nur von der .NET-Laufzeit selbst aufgerufen - es wäre also nicht sinnvoll, es als public
zu markieren.
Statischer Konstruktor ... Es wird garantiert, während der gesamten Lebensdauer der Anwendung/App Domain "einmal" genannt zu werden. Es kann Anweisungen enthalten, die nur einmal ausgeführt werden sollen.
Öffentlicher Konstruktor ... Da wir einem statischen Konstruktor keine Zugriffsmodifizierer hinzufügen können, bedeutet ein öffentlicher Konstruktor, dass Sie über einen Instanzkonstruktor sprechen. Wenn ein Instanzkonstruktor öffentlich ist, kann die Außenwelt seine Instanzen erstellen. Weitere Optionen sind Intern (kann innerhalb der Bibliothek aufgerufen werden), Privat (nur innerhalb der Klasse).
Der statische Konstruktor wird nur einmal ausgeführt, bevor die Klasse instanziiert wird. Es wird verwendet, wenn Sie möchten, dass nur einmal etwas passiert. Ein schönes Beispiel würde ein Bus-Klasse sein (ähnlich wie etwas, das sie in MSDN article erklären):
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.
}
Ich mag es wegen der klaren ersten Zeile: Einfach und unkompliziert! –
Static Constructor
Ein Konstruktor mit statischen Modifikator deklariert ein statischer Konstruktor ist. Ein statischer Konstruktor wird verwendet, um statische Daten zu initialisieren oder um eine bestimmte Aktion auszuführen, die nur einmal im Lebenszyklus einer Klasse ausgeführt werden muss. Statischer Konstruktor ist der erste Code-Block, der in der Klasse ausgeführt wird. Der statische Konstruktor wird im Lebenszyklus der Klasse einmalig ausgeführt. Es wird automatisch aufgerufen. Der statische Konstruktor nimmt keine Parameter an. Es hat keine Zugriffsspezifizierer. Es wird nicht direkt aufgerufen.
Instanz oder öffentlicher Constructor
Instanzkonstruktors verwendeten Instanzdaten zu initialisieren. Der Instanzkonstruktor wird jedes Mal aufgerufen, wenn das Objekt der Klasse erstellt wird. Es wird explizit aufgerufen. Der Instance-Konstruktor übernimmt Parameter. Es verfügt über Zugriffsspezifizierer.
- 1. Statischer Konstruktor und Ausnahmen
- 2. Privater Konstruktor und öffentlicher Parameterkonstruktor
- 3. Statischer Konstruktor & Singleton-Klasse
- 4. Typinitialisierung (statischer Konstruktor) Ausnahmebehandlung
- 5. Typoskript: Konstruktor öffentlicher Parameter dekorieren?
- 6. Statischer Konstruktor in Javascript ES6
- 7. Klassenentwurf: öffentlicher Konstruktor oder privat mit statischer Factory und einem COM-Objekt
- 8. C# Instance Constructor vs Statischer Konstruktor
- 9. Child statischer Konstruktor nicht aufgerufen, wenn Basiselement
- 10. Statischer Konstruktor für die gesamte Assembly
- 11. C++/CLI, statischer Konstruktor außerhalb der Klassendeklaration
- 12. Statischer Initialisierer läuft nach dem Konstruktor, warum?
- 13. Statischer Konstruktor, der zweimal für PerSession WCF-Dienst aufgerufen wird
- 14. Was bedeutet ein statischer Modifikator für einen Konstruktor?
- 15. Wann wird ein statischer Konstruktor in C# aufgerufen?
- 16. Konstruktor Parameter und Vererbung
- 17. Konstruktor und Methode
- 18. Move-Konstruktor und Initialisierungsliste
- 19. private Konstruktor und final
- 20. Java-Konstruktor und Feldinitialisierungsreihenfolge
- 21. Impliziter Konstruktor im Gegensatz zu "leerem" Konstruktor
- 22. Julia parametrische Konstruktor - Probleme mit äußeren Konstruktor
- 23. Überladen Sie "Basis" -Konstruktor oder "dieser" Konstruktor?
- 24. Wie Konstruktor Gattung Klasse Konstruktor aufzurufen
- 25. Konstruktor Zugriffsregeln
- 26. TreeMap-Konstruktor
- 27. Codewars Konstruktor
- 28. konstantes Objekt und const Konstruktor
- 29. Ausnahme und Copy-Konstruktor: C++
- 30. Java-Kopie Konstruktor und Vererbung
Wird ein statischer Konstruktor garantiert einmal aufgerufen? Was passiert, wenn der Typ niemals im Lebenszyklus einer App verwendet wird? – MPritchard
@MPritch, Sie haben Recht, in diesem Fall wird es nicht aufgerufen werden. Aber ich muss mich nicht einmal um die Dinge kümmern, die eine Klasse tut (oder nicht tut), wenn ich sie nirgends in meiner Anwendung, Ritus, benutze (oder verweise). –
das hängt alles davon ab, was Sie im Konstruktor tun – MPritchard