2010-02-21 2 views
3

여기 구조체에 대한 몇 가지 스레드를 읽고 있었는데 구조체와 그 값 유형 동작/의미로 인해 불변 값 (예 : 숫자 -1)을 나타내는 방식에 대한 설명이있었습니다.구조체는 항상 불변이어야합니까?

그러나 구조체는 전화 번호 같은 것을 나타내며 동일한 세대에 대해 변경할 수 있습니다.

이것은 어렵고 빠른 규칙입니까?

답변

5

전화 번호는 변경되지 않습니다. 너는 다른 것을 얻고 오래된 것을 버린다. 오래된 것은 여전히 ​​항상 동일합니다. 날짜, 숫자 등과 동일합니다. 구조체에 접근 할 때 이것을 생각하십시오. 이것들은 값을 캡슐화하는 방법입니다. 간단히 입니다. 변화하는 가치의 사용이 아닙니다.

+0

이것이 논리이면 다음과 같은 경우에 대해 : 우리는 발권 시스템을 사용합니다 직장에서 티켓이 구조체 인 경우 구조체의 배열과 같은 생각을하게됩니다. 배열을 작성한 후에는 변경 (또는 변경)하거나 삭제할 수 없지만 할당 배열에 원하는만큼 많은 할당을 추가 할 수 있습니다. 티켓 유형이 구조체 여야한다고 생각하고 있습니다. 그러나, 나는 구조체가 가장 원자 적 유형이어야한다고 종종 생각한다. (예를 들어,이 경우에는 할당이 티켓 내에 있으므로 할당이 없다). – dotnetdev

+0

@dotnetdev 분명히 다양한 사용법과 모든 규칙에 예외가 있지만 값이 아니기 때문에 티켓을 구조체로 만들지는 않을 것입니다. 구성 요소가 변경 될 수있는 엔터티입니다. 구조체의 총 풋 프린트는 16 바이트보다 커서는 안된다는 점도 명심하십시오! –

+0

감사합니다. 어렵고 빠른 규칙은 없지만 예제를 생각하고 다른 사람들의 의견을 묻는 것은 내 의사 결정 프로세스를 미세하게 조정 해줍니다! – dotnetdev

3

예, 구조체는 항상 변경 가능해야합니다! 가변 구조체는 사용법이 매우 이상한 행동을 일으킬 수 있으므로 두통을 야기 할 수 있습니다.

+1

물론, 당신은 "Mutable structs"를 의미합니까? – Pwninstein

+0

예, 정확히 말했습니다. 감사합니다. :) –

+0

나는 그가 _why_ mutable 구조체에 대한 설명이 나쁘다. –

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++. 당신은 정말, 당신은보다 큰 하나 새로운 값를 저장하고 있습니다. 당신은 민트의 값을 변경하는 생각이 정수에 새 값을 할당 이전 값. 동시에 myStruct.MyInt 액세스하는 다른 스레드가있을 수 있기 때문에

는 왜? 상관이야, 당신이 그것을 갑자기 사용되는 중간하는 int 변경하는 작업있어 값을 싶지 않아요.의