C # - Werden statische Eigenschaften einer Klasse jedes Mal initialisiert, wenn diese Klasse initialisiert wird?

John C.

Ich schaue mir gerade einen alten Code an und bin auf eine Klasse gestoßen, die eine private statische Eigenschaft verwendet, die mit einem Standardwert erstellt und nie geändert wird. etwas wie das -

public class Foo
{
    private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["SqlConnection"].ToString();

    public Bar GetBar(int barId)
    {
        // get bar using "ConnectionString" above
    }
}

Meine Frage lautet also: Hat es einen Vorteil ConnectionString, statisch zu sein? dh Wird ConfigurationManager.ConnectionStrings["SqlConnection"].ToString();jedes Mal ausgeführt, wenn ausgeführt new Foo()wird, wodurch der statische Wert der Eigenschaft überflüssig wird, da er bei jeder Initialisierung der Klasse überschrieben wird?

Zoran Horvat

Statische Felder werden einmal initialisiert , wenn das erste Objekt dieser Klasse instanziiert wird, nicht jedes Mal, wenn ein Objekt erstellt wird. Das macht sie relativ effizient.

Dies hat jedoch einen Nachteil, nämlich dass die Konstruktoren auf Instanzebene mit einer Zustandsmaschine verschönert sind, die bestimmt, ob die einmalige Initialisierung abgeschlossen wurde oder nicht.

Wenn das erste Objekt der Klasse erstellt wird, wird der statische Konstruktor aufgerufen, bevor ein anderer Code auf Instanzebene ausgeführt wird. Für nachfolgende Instanziierungen wird dieser Schritt übersprungen, da die Klasse bereits initialisiert wurde.

Dieser zusätzliche Code, der während der Kompilierung generiert wird, macht jeden Konstruktor auf Instanzebene ein kleines bisschen langsamer als ohne die statischen Elemente.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Werden Eigenschaften einer Klasse in C# gleichzeitig oder sequentiell initialisiert?

Warum wird das Mitglied der F # -Klasse jedes Mal initialisiert, wenn es aufgerufen wird?

Python 3.8 - Setzt Eigenschaften dynamisch auf eine Klasse, wenn diese initialisiert wird

In welcher Reihenfolge werden die verschiedenen Teile einer Klasse initialisiert, wenn eine Klasse in die JVM geladen wird?

Warum deklarieren Sie die Eigenschaften der Klasse, wenn der Konstruktor diese Eigenschaften initialisiert?

Warum wird die Listeninitialisierung nicht aufgerufen, wenn diese Klasse initialisiert wird?

Das statische Feld wird später initialisiert, wenn die Klasse einen statischen Konstruktor hat

C++-Klasse wird nicht initialisiert

Die Eigenschaften der PHP-Klasse sind leer, wenn sie im Konstruktor initialisiert werden

Wo werden Mitgliedsvariablen der Klasse in C ++ initialisiert?

Wie wird eine rekursive innere statische Klasse initialisiert?

Flutter/Dart-Variablen verloren / werden immer wieder neu initialisiert, wenn versucht wird, von einer anderen Klasse zu kommen

Die Eigenschaften einer Klasse können während der Objekterstellung nicht direkt in Java initialisiert werden

Wird es möglich sein, den Typnamen wegzulassen, wenn nicht typisierte Vorlagenargumente der C ++ 2a-Klasse initialisiert werden?

Java: Aufruf einer Objektmethode aus einer anderen Klasse, wenn das Objekt im Initialisierungsblock initialisiert wird

SFML-Objekte werden nicht gezeichnet, wenn die übergeordnete Klasse neu initialisiert wird

Die lateinit-Eigenschaftenbindung wurde nicht initialisiert, wenn sie von einer anderen Klasse verwendet wird

Klasse nicht gefunden, wenn sie in einem anderen Klassenkonstrukt initialisiert wird

Wie funktioniert die Initialisierung, wenn eine Klasse Objekte einer anderen Klasse enthält und alle Klassen über Konstruktoren initialisiert werden?

Mitglied einer verspotteten Klasse kann nicht initialisiert werden

C2512 Fehler - Auch wenn die Klasse nicht initialisiert wird

C++ initialisiert verschachtelte Klasse

Warum kann in einer C ++ - Klasse nur ein Integral- oder Aufzählungstyp initialisiert werden?

Java EE CDI - Abrufen einer neuen Instanz einer Klasse jedes Mal, wenn eine Methode aufgerufen wird

Die C ++ - Eigenschaft der Klasse scheint neu initialisiert zu werden

Wie werden statische Member einer Template-Klasse konstruiert, wenn eine statische Funktion aufgerufen wird?

Wie eine Klasse, die nicht alle Mitglieder in ihrem Konstruktor initialisiert, in C ++ 11 initialisiert werden soll

Aktualisieren Sie die Klasse jedes Mal, wenn einer der Kwargs aktualisiert wird

Werkzeug- und Klassenstatus mit Flask: Wie werden Klassenmitgliedervariablen zurückgesetzt, wenn die Klasse nicht neu initialisiert wird?

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  3. 3

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  4. 4

    Eclipse Oxygen - Projekte verschwinden

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Wie kann ich den Kaskadenmodus global einstellen?

  7. 7

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  8. 8

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  9. 9

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  10. 10

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  11. 11

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  12. 12

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  13. 13

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  14. 14

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  15. 15

    Wie wählt man Unterschiede mit drei Tabellen aus?

  16. 16

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  17. 17

    Wie kann ich meine Tabelle abfragen, um sie in mySQL nach 2 Feldern zu gruppieren?

  18. 18

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  19. 19

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  20. 20

    Modbus Python Schneider PM5300

  21. 21

    Wie kann eine gleichmäßige Lastverteilung in ElasticSearch mit Indizes mit unterschiedlicher Anzahl von Shards erreicht werden?

heißlabel

Archiv