Static kann an vielen Stellen Sinn machen, sollte aber mit Bedacht genutzt werden, da static prinzipiell etwas gegen die Prinzipien der Objektorientierung arbeitet (z.B. der Zuweisung von Funktionalität an ein Objekt).

Static kann aber beispielsweise Sinn machen, wenn du ein Singlepattern implementieren möchtest. Ein Singletonpattern könnte z.B. wie folgt aussehen:

public class Singleton
  {
    public static Singleton Instance { get; }

    static Singleton()
    {
      Instance = new Singleton();
    }

    private Singleton()
    { }

    public void InstanceMethod1() => Console.WriteLine("Ich bin eine Instanzmethode");

    public void InstanceMethod2() => Console.WriteLine("Ich bin auch eine Instanzmethode");
  } 

Durch dieses Muster hast du immer eine nur genau eine Instanz der Singleton-Klasse (auf der Property "Instance"), da die Klasse nicht außerhalb von sich selbst instanziiert werden kann und sich selbst nur beim ersten Zugriff auf sie instanziiert (Eigenschaft des statischen Konstruktors: Er wird nur ein einziges Mal beim ersten Zugriff auf die Klasse durchlaufen). Diese eine Anwendungs-weite Singletoninstanz kannst du dann in der ganzen Anwendung wie folgt abrufen und dessen Instanzmethoden verwenden:

public void SingletonTest()
    {
      Singleton.Instance.InstanceMethod1();
    }

Static benutze ich außerdem häufig für "Toolbox"-Klassen - also Klassen die allgemeine Funktionen bereitstellen um mir das Leben zu vereinfachen und einfach immer aufrufbar sein sollen ohne das ich explizit eine Instanz der Klasse erstellen muss. Außerdem macht z.B. auch in Anwendungsfällen Sinn, wo du zählen möchtest, wie oft ein Objekt bereits initialisiert wurde.

Ein besonderer Anwendungsfall sind Extensionmethoden - also Methoden mit denen du vorhandene Klassen dessen Quellcode dir nicht vorliegt erweitern möchtest. Z.B. so:

public static class ListExtensions
  {
    public static void PrintAllItems<T>(this List<T> items)
    {
      foreach (var item in items)
        Console.WriteLine(item);
    }
  }

Dadurch schaffst du dir die Möglichkeit die Methode "PrintAllItems" auf allen Objekten vom Typ List<T> aufzurufen:

public void ExtensionTest()
    {
      var list = new List<string>();
      list.PrintAllItems();
    }

Es gibt bestimmt noch tausende Anwendungsfälle für static und auch viele bei denen man auf static verzichten sollte, jedoch sind das so die Fälle in welchen ich static oft verwende.

...zur Antwort

Ich würde mal folgendes prüfen:

  • Ist deine config.cfg ggf. schreibgeschützt?
  • Verwendest du eine autoexec.cfg (um ggf. Einstellungen beim Start zu überschreiben)

Beide Dateien findest du unter folgendem Pfad:

<Steaminstallationsordner>/userdata/<ID deines Accounts>/730/local/cfg

...zur Antwort

Nein eine Klasse besitzt keine Objekte. Eine Objektinstanz besitzt Objekte.

Wie du schon sagst ist eine Klasse der Bauplan eines Objektes. Du verwendest also eine klasse um daraus ein Objekt zu erstellen, was auch Objektinstanziierung genannt wird.

Objektinstanzen werden erst zur Laufzeit erstellt, nicht zur Compilezeit.

Ein Beispiel von Objektinstanzen wäre wie folgt:
Du hast eine Klasse Tier mit den beiden Eigenschaften Farbe und Name. Nun erstellst du an irgendeiner Stelle in deinem Code ein neues Objekt dieser Klasse und vergibst Werte für die beiden Eigenschaften.
Nun kannst du aber von einer beliebigen anderen Stelle in deinem Code erneut ein neues Objekt der Klasse Tier erstellen und andere (oder die gleichen) Eigenschaften dafür vergeben. Damit hast du zwei unterschiedliche Objektinstanzen der gleichen Klasse.

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.