11 Stimmen

Was ist das C#-Äquivalent zu PHPs "self::"?

Wenn ich in C# eine statische Methode einer Klasse von einer anderen statischen Methode dieser Klasse aus aufrufen möchte, gibt es eine generische Vorsilbe die ich verwenden kann, wie zum Beispiel PHPs self:: anstelle des Klassennamens?

In dem folgenden Beispiel wird also statt der Worte Customer.DatabaseConnectionExists() wie kann ich dann etwas sagen wie Self.DatabaseConnectionExists() so dass ich z. B. später, wenn ich den Namen der Klasse ändere, nicht alle Präfixe ändern muss?

class Customer
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public static Customer GetCurrentCustomer()
    {
        if (Customer.DatabaseConnectionExists())
        {
            return new Customer { FirstName = "Jim", LastName = "Smith" };
        }
        else
        {
            throw new Exception("Database connection does not exist.");
        }
    }

    public static bool DatabaseConnectionExists()
    {
        return true;
    }
}

17voto

Noldorin Punkte 138548

Es gibt keine wirkliche Entsprechung - Sie müssen entweder den Klassennamen angeben, d.h.

Customer.DatabaseConnectionExists()

oder den Qualifier ganz weglassen, d.h.

DatabaseConnectionExists()

Die letztgenannte Art des Aufrufs ist ratsam, da sie einfacher ist und nicht an Bedeutung verliert. Außerdem entspricht sie eher dem Methodenaufruf in Instanzen (d.h. Aufruf durch InstanceMethod() et no this.InstanceMethod() die zu langatmig ist).

13voto

Kirschstein Punkte 13920

Wenn Sie die Methode innerhalb der Klasse aufrufen, müssen Sie nichts wie ::Self angeben, der Name der Methode reicht aus.

class Customer
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public static Customer GetCurrentCustomer()
    {
        if (DatabaseConnectionExists())
        {
            return new Customer { FirstName = "Jim", LastName = "Smith" };
        }
        else
        {
            throw new Exception("Database connection does not exist.");
        }
    }

    public static bool DatabaseConnectionExists()
    {
        return true;
    }
}

4voto

Dario Punkte 47246

Lassen Sie es einfach weg. DatabaseConnectionExists ist innerhalb der Klasse definiert.

2voto

Alex Jenter Punkte 4204

Rufen Sie es einfach ohne Präfix auf.

0voto

Nein, die gibt es nicht. Aber mit den Refactor-Tools sollte das Ändern eines Klassennamens keine allzu großen Probleme bereiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X