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?
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.
Lass mich ein paar Worte sagen