Задать постоянное строковое значение для соответствия имени функции - PullRequest
0 голосов
/ 21 мая 2019

Существуют функции, которые вызывают другую функцию через имя (например: Invoke ).

Обычно я использую это так:

void Start()
{
    Invoke("SelfDestroy", 2);
}

public void CancelDestroy()
{
    CancelInvoke("SelfDestroy");
}

void SelfDestroy()
{
    Destroy(gameObject);
}

Но я ленивый парень, поэтому я не хочу набирать одну строку несколько раз (я могу сделать опечатку), поэтому я делаю это так:

const string SELF_DESTROY_METHOD = "SelfDestroy";

void Start()
{
    Invoke(SELF_DESTROY_METHOD, 2);
}

public void CancelDestroy()
{
    CancelInvoke(SELF_DESTROY_METHOD);
}

void SelfDestroy()
{
    Destroy(gameObject);
}

Но это все равно меня не устраивает, я хочу, чтобы постоянная строка SELF_DESTROY_METHOD программно соответствовала методу SelfDestroy, поэтому, если я изменю имя метода SelfDestroy, значение постоянной строки SELF_DESTROY_METHOD будет равно автоматически обновляется соответственно. Возможно ли это в C #?

1 Ответ

0 голосов
/ 21 мая 2019

Благодаря комментарию Себастьяна Шумана решение - nameof .Код должен быть

const string SELF_DESTROY_METHOD = nameof(SelfDestroy);

void Start()
{
    Invoke(SELF_DESTROY_METHOD, 2);
}

public void CancelDestroy()
{
    CancelInvoke(SELF_DESTROY_METHOD);
}

void SelfDestroy()
{
    Destroy(gameObject);
}

Примечание. Я использовал Unity, и у меня была Scripting Runtime Version .NET 3.5, поэтому я получил ошибку Feature 'nameof operator' is not available in C# 4. Please use language version 6 or greater., поэтому я обновил Scripting Runtime Version до .NET 4.x иработает, проверьте Руководство по выполнению сценариев для получения дополнительной информации.

...