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 здесь