Я исследовал эту тему, но я не мог найти ни одного дубликата. Мне интересно, почему вы можете использовать struct
в массиве без создания экземпляра.
Например, у меня есть class
и struct
:
public class ClassAPI
{
public Mesh mesh { get; set; }
}
public struct StructAPI
{
public Mesh mesh { get; set; }
}
Когда ClassAPI
используется в массиве, он должен быть инициализирован new
ключевым словом, прежде чем использовать его свойства и методы:
ClassAPI[] cAPI = new ClassAPI[1];
cAPI[0] = new ClassAPI(); //MUST DO THIS!
cAPI[0].mesh = new Mesh();
Но это не относится к StructAPI
. Похоже, что StructAPI
не нужно инициализировать в массиве:
StructAPI[] sAPI = new StructAPI[1];
sAPI[0].mesh = new Mesh();
Если вы попробуете то же самое с ClassAPI
, вы получите NullReferenceException
.
Почему это отличается от структуры при использовании их в массиве?
Я понимаю разницу между class
и struct
когда struct
является типом значений, но это все еще не имеет смысла. Для меня, без участия массива в этом, было бы похоже, что я это делаю:
StructAPI sp;
sp.mesh = new Mesh();
Обратите внимание, что переменная sp
не инициализирована и должна приводить к ошибке времени компиляции:
Ошибка CS0165 Использование неназначенной локальной переменной sp
но это другая история, когда struct
помещается в массив.
Является ли массив инициализацией struct
в нем? Я хотел бы знать, что происходит.