initialisieren - c# static initializers



Was ist der Unterschied zwischen statischen Methoden in einer nicht statischen Klasse und statischen Methoden in einer statischen Klasse? (4)

Ich habe zwei Klassen Klasse A und Klasse B:

static class ClassA
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

class ClassB
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

Ich möchte wissen, was der Unterschied zwischen ClassA.SomeMethod(); und ClassB.SomeMethod();

Wenn auf beide zugegriffen werden kann, ohne eine Instanz der Klasse zu erstellen, warum müssen wir dann eine statische Klasse erstellen, anstatt nur eine nicht statische Klasse zu verwenden und die Methoden als statisch zu deklarieren?



Der einzige Unterschied besteht darin, dass statische Methoden in einer nicht statischen Klasse keine Erweiterungsmethoden sein können .

Mit anderen Worten ist dies ungültig:

class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}

während dies gilt:

static class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}

Eine statische Methode gehört zur Klasse und eine nicht statische Methode gehört zu einem Objekt einer Klasse. Das heißt, eine nicht statische Methode kann nur für ein Objekt einer Klasse aufgerufen werden, zu der es gehört. Eine statische Methode kann nur auf statische Member zugreifen. Eine nicht statische Methode kann sowohl auf statische als auch auf nicht statische Member zugreifen, da die Klasse zum Zeitpunkt des Aufrufs der statischen Methode möglicherweise nicht instanziiert wird (wenn sie für die Klasse selbst aufgerufen wird). Andernfalls kann eine nicht statische Methode nur aufgerufen werden, wenn die Klasse bereits instanziiert wurde. Eine statische Methode wird von allen Instanzen der Klasse gemeinsam genutzt. Immer wenn eine Methode in C ++ / Java / C # aufgerufen wird, wird ein implizites Argument (die 'this'-Referenz) zusammen mit / ohne die anderen Parameter übergeben. Bei einem statischen Methodenaufruf wird die Referenz 'this' nicht übergeben, da statische Methoden zu einer Klasse gehören und daher keine Referenz 'this' haben.


Wenn Sie eine nicht statische Klasse haben, die nur statische Methoden enthält, können Sie eine Instanz dieser Klasse erstellen. Sie können diese Instanz jedoch nicht sinnvoll verwenden. Hinweis: Wenn Sie keinen Konstruktor definieren, fügt der Compiler einen hinzu.

Eine statische Klasse hat keinen Konstruktor, daher können Sie keine Instanz davon erstellen. Außerdem gibt der Compiler einen Fehler aus, wenn Sie eine Instanzmethode hinzufügen (wobei Sie eine statische Methode gemeint haben).

Siehe auch docs .





non-static