Информация об изменениях

Сообщение Re[6]: `operator ==` в Unity от 29.10.2023 6:40

Изменено 29.10.2023 6:53 Qbit86

Re[6]: `operator ==` в Unity
Здравствуйте, Sinclair, Вы писали:

S>Ведь если оператор сравнения перегружен каким-то нехорошим образом так, что он неверно проверяет на null, то у проекта проблемы тут не в code style. И при помощи is эти проблемы не решить.

S>Что не так с operator== в Unity?

У игровых объектов (или компонентов на них висящих) может быть статус «разрушен» — когда они удалены из дерева сцены, их ресусрсы освобождены, они не могут получать событий обновления, etc.
Так вот, вместо того, чтобы добавить в API свойство или метод IsAlive или IsDisposed, расработчики Unity переопределили operator ==, изменив его логику для случая сравнения с null. Проверка вида if (myGameObject == null) возвращает true, если ссылка is null или если объект разрушен.
Re[6]: `operator ==` в Unity
Здравствуйте, Sinclair, Вы писали:

S>Ведь если оператор сравнения перегружен каким-то нехорошим образом так, что он неверно проверяет на null, то у проекта проблемы тут не в code style. И при помощи is эти проблемы не решить.

S>Что не так с operator== в Unity?

У игровых объектов (или компонентов на них висящих) может быть статус «разрушен» — когда они удалены из дерева сцены, их ресусрсы освобождены, они не могут получать событий обновления, etc.
Так вот, вместо того, чтобы добавить в API свойство или метод IsAlive или IsDisposed, расработчики Unity переопределили operator ==, изменив его логику для случая сравнения с null. Проверка вида if (myGameObject == null) возвращает true не только когда ссылка is null, но и если объект разрушен; причём другого способа проверить разрушенность нет.
А если ты вызываешь методы движка на разрушенном объекте (имея на него ненулевую ссылку), то разработчики выбрасывают исключение типа NullReferenceException.