Есть ли в Unity 3D общее правило понимания того, когда на переменную ссылаются, и когда она дублируется в новую переменную? - PullRequest
0 голосов
/ 14 июля 2020

Например, если у меня есть враги, и у каждого из врагов есть класс, который сохраняет очки. Затем я, когда появляется враг, он подключается к PointsKeeper.Instance и добавляет себя к List<EnemyPoints> points

Есть ли простой способ узнать, является ли EnemyPoints, который я добавляю, в список, является ссылкой к оригиналу или копии?

Пример кода:

private List<EnemyPoints> points;

public void AddEnemy(EnemyPoints enemy)
{
    points.Add(enemy);
}

public void AddPoint(int enemy)
{
    points[enemy].points++;
}

1 Ответ

1 голос
/ 14 июля 2020

C# - язык передачи по значению. Таким образом, когда вы передаете переменную в метод, он всегда передает значение, а не ссылку.

Итак, во втором методе:

public void AddPoint(int enemy)
{
points[enemy].points++;
}

ваш int enemy будет фактически содержат значение типа int, которое вы хотите передать.

Что немного усложняет, так это то, что в вашем первом методе вы передаете объект:

public void AddEnemy(EnemyPoints enemy)
{
points.Add(enemy);
}

На этот раз ваша переменная EnemyPoints enemy содержит не весь объект, а адрес в памяти экземпляра. Итак, вы фактически передаете значение, но это значение является ссылкой на ваш экземпляр объекта. Таким образом, в итоге вы фактически передаете ссылку.

Фактически, типы данных разделены в c# документах на типы значений и ссылочные типы. Первые содержат реальное значение типа, вторые содержат ссылку.

Вы можете проверить microsoft docs здесь

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