2010-02-21 3 views
3

Я читал пару потоков здесь о структурах и был/был о структурах и как они должны представлять неизменяемые значения (например, как цифру - 1) из-за их поведения/семантики типа значения.Должны ли структуры всегда быть неизменными?

Но, с другой стороны, структуры представляют такие вещи, как номера телефонов, которые могут меняться для одного и того же домашнего хозяйства.

Является ли это жестким и быстрым правилом?

ответ

5

Номер телефона не изменяется; вы просто получаете другую и отбрасываете старую. Старый все тот же, что и всегда. То же самое касается дат, цифр и т. Д. - думайте об этом при приближении к структурам. Это способ инкапсулировать значение, которое просто равно; а не использование значения, которое изменяется.

+0

Если это логика, то как насчет следующего: мы используем систему продажи билетов на работе, если билет представляет собой структуру, тогда в нем будут иметь назначения (подумайте, как массив в структуре). Как только массив написан, его нельзя изменить (или изменить) или даже удалить, но вы можете добавить столько назначений в массив назначений, сколько захотите. Я думаю, что тип билета должен быть структурой. Тем не менее, я часто думаю, что структура должна быть самым атомным типом (например, в этом случае присваивание находится в пределах билета, так что это назначение). – dotnetdev

+0

@dotnetdev Очевидно, что использование различно и есть исключения для каждого правила, но я бы не сделал билетом структуру, потому что это не значение, это сущность с составными частями, которые могут измениться. Также важно иметь в виду, что общая площадь структуры должна быть не более 16 байт! –

+0

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

3

Да, структуры всегда должны быть неизменными! Изменяемые структуры могут вызвать ужасные головные боли, поскольку их использование может создать очень странное поведение.

+1

из Конечно, вы имеете в виду «Mutable structs», правильно? – Pwninstein

+0

Да, это именно то, что я имел в виду, спасибо :) –

+0

Думаю, он ищет n объяснение _why_ mutable structs настолько плохое. –

1

Да, структуры должны быть почти всегда неизменными. Например, в вашем номере телефонного номера сам номер телефона не мутирует: происходит то, что домохозяйству назначен новый номер телефона. Телефон 555-555-1234 по-прежнему является номером телефона 555-555-1234, но телефонный номер домашнего хозяйства - другой номер номер 555-555-5678.

Обратите внимание, что вы можете обнаружить нарушения этого руководства в .NET Framework. Например, структуры WPF Point и Size являются изменяемыми. Это не очень хорошая практика, как следует, когда вы пытаетесь написать something.Location.X = newX.

0

Неизменное значение! = Неизменное переменная

Что означает, даже если переменная содержит значение, которые не могут быть изменены, вы можете изменить переменную, чтобы иметь различное содержание. int x = 5; x++; является законным. 5++; нет.

Если структура содержит целое число, и присвоить новое значение для этого целого числа (например, myStruct.MyInt++. Вы можете подумать, вы меняете значение MyInt. На самом деле, вы храните новое значение Это один больше старое значение.

Почему это важно? Потому что там может быть другой поток доступа myStruct.MyInt одновременно, и вы не хотите, чтобы значение она работает с внезапно изменить ИНТ середину используется.

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