Что такое C # эквивалент PHP "self ::"? - PullRequest
9 голосов
/ 13 мая 2009

В C #, когда я хочу вызвать статический метод класса из другого статического метода этого класса, существует ли универсальный префикс , который я могу использовать, например, self:: в PHP вместо имени класса

Итак, в приведенном ниже примере, вместо того, чтобы сказать Customer.DatabaseConnectionExists(), как я могу сказать что-то вроде Self.DatabaseConnectionExists(), например, позже, если я изменю имя класса, мне не нужно менять все префиксы?

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;
    }
}

Ответы [ 5 ]

15 голосов
/ 13 мая 2009

Нет реального эквивалента - вы должны либо указать имя класса, т.е.

Customer.DatabaseConnectionExists()

или вообще не указывать квалификатор, т. Е.

DatabaseConnectionExists()

Последний стиль вызова целесообразен, поскольку он проще и не теряет никакого смысла. Кроме того, он более встроен в вызов метода в экземплярах (то есть вызов InstanceMethod() и , а не this.InstanceMethod(), что слишком многословно).

13 голосов
/ 13 мая 2009

Если вы вызываете метод из класса, вам не нужно указывать что-то вроде :: Self, подойдет только имя метода.

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;
    }
}
4 голосов
/ 13 мая 2009

Просто оставь это. DatabaseConnectionExists определяется внутри класса.

2 голосов
/ 13 мая 2009

Просто позвоните без префикса.

0 голосов
/ 13 мая 2009

Нет, нет. Но с помощью инструментов рефакторинга изменение имени класса не должно вас сильно беспокоить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...