Statische Klassen werden verwendet, wenn Sie keine Objekte instanziieren. Sie erhalten eine "Instanz" dieser Klasse - Sie können keine Dinge wie:
MyStaticClass m = new MyStaticClass();
m.SomeFunc();
wenn Sie eine statische Klasse haben. Stattdessen würden Sie es verwenden, indem Sie den Klassennamen selbst verwenden. Etwas wie:
MyStaticClass.SomeFunc();
Was würden Sie verwenden, um jedes Kundenobjekt zu verfolgen? Sie könnten eine Art Sammlung verwenden, um diese zu halten. Zugegeben, in einem echten System würde es eine Art Persistenzstück geben, wahrscheinlich eine Datenbank, um die Daten zu halten. Aber man konnte einfach machen so etwas wie:
IEnumerable<Customer> Customers = new List<Customer>();
Und dann Ihre Kunden hinzufügen zu dieser Liste
Customers.Add(new Customer() { ... });
Zurück auf die Frage nach statischen Methoden ...
So, hier ist der Deal dass Sie keine Instanzelemente in einer statischen Methode referenzieren, also würden Sie keine statischen Methoden verwenden, um die Adresse eines bestimmten Kunden zu aktualisieren. Angenommen, Ihre Customer-Klasse sah aus wie:
public class Customer
{
public string Address { get; set; }
}
Sie nicht eine statische Methode wie
public static void SetAddress()
, weil jeder Kunde (vermutlich) eine andere Adresse verwenden könnte. Sie konnten dort nicht auf die Kundenadresse zugreifen, da diese nicht statisch ist. Hast du das? Stattdessen würden Sie eine statische Methode verwenden, wenn Sie etwas tun möchten, das nicht mit Instanzdaten umgehen muss. Ich verwende statische Methoden für Dinge wie Utility-Funktionen.
var result = MyStaticClass.ComputeSomething(3.15);
Das Essen zum Mitnehmen ist hier, dass statische Klassen werden nicht verwendet, um Objekte zu instanziiert, sondern sie werden verwendet, wirklich als:
public static double ComputeSomething(double someVal) { ... }
Hier kann die ComputeSomething Funktion von jedermann wie genannt werden praktischer Behälter, um Funktionen zu halten. Statisch Funktionen sind diejenigen, die in einer nicht statischen Klasse sein können, aber nicht auf alle Instanzdaten zugreifen können.
Eine Stelle, an der eine statische Funktion verwendet würde, wäre das Singleton-Muster. Sie machen den Konstruktor nicht öffentlich, so dass Leute ihn nicht aufrufen können, und stattdessen eine statische Methode für die Klasse bereitstellen, um die einzige Instanz der Klasse zurückzugeben. Etwas wie:
public class MySingleton
{
private static MySingleton instance;
private MySingleton() {}
public static MySingleton Instance
{
get
{
if (instance == null)
{
instance = new MySingleton();
}
return instance;
}
}
}
@Slugster Messepunkt. – nickhar
Liste und andere Arten von Sammlungen sind wichtig. Überprüfen Sie auch MSDN: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx –
varg