2016-06-07 7 views
0

Например, сказать, что я хотел сделать имитатор генетики и у меня был очень простойКак ссылаться на экземпляр структуры внутри себя?

-структуру
public struct person{ 
    string name; 
    int age; 
    string hairColor; 

    person father; 
    person mother; 
} 

, чтобы потом я мог бы сослаться на человека цвет волос родителя Joey с Joey.father.haircolor? Я продолжаю получать ошибку:

Struct Member 'person.father' of type 'person' causes a cycle in the struct layout 

Является ли мой единственный вариант использования класса? Ради скорости я предпочел бы использовать структуру, потому что все данные, но если нет альтернативы, я могу, очевидно, просто использовать класс.

+6

Я думаю, вы поняли, как работают Структуры - особенно учитывая ваш «поскольку все данные». Что ты имеешь в виду? Как вы думаете, какая разница между структурой и классом? –

+0

То, что @JonSkeet намекает на то, что, как только вы поймете разницу между классом и структурой, проблема будет очевидна: https://msdn.microsoft.com/en-us/library/ms173109.aspx ? f = 255 & MSPPError = -2147217396 – GEEF

+0

Я был под впечатлением от того, что я читал, что структуры и классы близки к одной и той же, но структуры должны использоваться, когда это больше набор данных. – Daymare

ответ

1

Структура не может самоопределяться, поскольку это создаст бесконечно рекурсивное определение. Единственный вариант - использовать класс.

+0

Как этот аргумент не относится к классам? – mireazma

+1

классы @mireazma могут быть нулевыми, поэтому рекурсия заканчивается где-то (или создает цикл ссылок, который хорош, так как требует конечного объема памяти). Структуры не могут быть нулевыми и не могут создать цикл, который заканчивается где-то, потому что каждое поле типа структуры содержит свою собственную копию структуры. –

5

Вашего типа лицо должно быть классом по нескольким причинам:

  • на структуру не могу самостоятельно ссылка
  • на структуру следует рассматривать, если экземпляр будет небольшим и обычно недолговечен или обычно вкладывается в других объектах. Кажется, это не так.
  • Следует учитывать структуру, если все эти условия соблюдены: 1. она логически представляет одно значение, такое как примитивные типы 2. он имеет размер экземпляра до 16 байт. 3.IIt является неизменным 4. Он не должен быть в коробке часто. Это не так.
  • Если вы используете структуру, два человека не могут делиться одним и тем же отцом, поскольку переменная передается по значению. Это даст плохой дизайн
  • Вас интересуют скорость, но использование класса быстрее, чем структуры, так как переменные передаются по ссылке, а не по значению
+1

Это хороший ответ. – Rahul

Смежные вопросы