W Unity podczas używania coroutines lub InvokeRepeating, musisz podać ciąg znaków z nazwą funkcji, którą chcesz wywołać. Chociaż zmiana nazwy tej funkcji jest uciążliwa, ponieważ trzeba pamiętać o zmianie współprogramów, które jej używają. Czy jest to czystszy sposób na zrobienie tego?Uzyskaj nazwę funkcji w języku C#
Obecnie wygląda to tak:
InvokeRepeating ("SendChangedValues", SEND_RATE, SEND_RATE);
choć byłoby miło mieć coś podobnego
InvokeRepeating (SendChangedValues.Name(), SEND_RATE, SEND_RATE); //or
InvokeRepeating (functions.GetName(SendChangedValues), SEND_RATE, SEND_RATE);
Czy jest to możliwe w języku C#? Lub coś innego, co sprawia, że dostaję błąd/ostrzeżenie, gdy zmieniam nazwę funkcji bez zmiany tych łańcuchów.
Edycja 1: Najczystsza rzecz jaką mogłem wymyślić to stworzenie ciągu znaków z nazwą funkcji i umieszczenie go tuż przed samą funkcją. Trudniej jest więc zapomnieć o zmianie ciągu znaków, ponieważ znajduje się on nad nim i muszę zmienić tylko jeden ciąg znaków, aby zmienić wszystkie współprogramy.
Dzięki!
Nigdy nie słyszałem o tym, ale id sugeruje, aby utworzyć zmienną łańcuchową do użycia, gdy trzeba jej użyć w wywołaniu i zachować ten ciąg obok odpowiedniej metody. – Sayse
Haha, tak, to także to, o czym właśnie pomyślałem: DI edytował moje pytanie podczas pisania twojego komentarza: P –
Prawdopodobnie możesz stworzyć niestandardowy atrybut, aby udekorować twoje funkcje, a ten atrybut może wziąć ciąg znaków jako identyfikator, który nie musi się zmieniać, jeśli zmieni się nazwa funkcji. Następnie wpisz kod, który pod warunkiem, że ten ciąg znajdzie funkcję, która jest ozdobiona niestandardowym atrybutem zainicjowanym za pomocą tego ciągu, pobierz nazwę metody i przekaż ją jako parametr "InvokeRepeating".Nie gwarantuje to, że ktoś zmieni ciąg atrybutu, ale nie powinno się tego wymagać, a tym samym zmniejszyłby szanse na słaby refactor kodu (przynajmniej w teorii). – LB2