최근 프로젝트에서 동료가 내 어깨 너머로보고있는 문제를 풀기 위해 수업 시간에 구조를 만들었습니다. 구조 "라고 말하고"그것을 수업으로 옮기라 "고 말했다.클래스가 아닌 구조체를 사용하는 것이 좋습니다.
나는 그것을 이외의 클래스로 옮기지 않으려 고하지 않았다.에만이 클래스가 필요하지만이 클래스는 중첩 클래스가 될 수 없기 때문에 떨어지는가?
구조체를 사용하는 것이 좋습니까?
최근 프로젝트에서 동료가 내 어깨 너머로보고있는 문제를 풀기 위해 수업 시간에 구조를 만들었습니다. 구조 "라고 말하고"그것을 수업으로 옮기라 "고 말했다.클래스가 아닌 구조체를 사용하는 것이 좋습니다.
나는 그것을 이외의 클래스로 옮기지 않으려 고하지 않았다.에만이 클래스가 필요하지만이 클래스는 중첩 클래스가 될 수 없기 때문에 떨어지는가?
구조체를 사용하는 것이 좋습니까?
다음
기사는 몇 가지 중요한 점하지만 내가 느끼는 그 몇 가지를 나열을?
두 질문에 대한 대답이 예인 경우 구조를 사용하는 것이 좋습니다. 그렇지 않으면 수업을 듣는 것이 좋습니다.
많은 수의 멤버가있는 구조를 사용하는 데 문제가 있습니다. 그러나 위의 두 가지 사항을 고려할 때 권장하는 회원 수/크기보다 가치 유형이 더 많지는 않습니다.
MSDN은 구조용으로 사용하기에 좋은 guidelines document입니다. 요약하려면 :
그렇지 않으면 클래스를 사용하십시오.
처음에는 Class
을 사용하고 매우 구체적인 이유로 만 Structure
으로 변경해야합니다 (이미 설명한대로).
얼마나 많은 "이 클래스에만 필요합니까"에 따라 anonymous type을 사용하여 중첩 된 유형을 완전히 피할 수 있습니다. (- 당신이 제네릭 할 수있는 몇 가지 있습니다 쉽게) 형태 보증 된 방식으로 인스턴스에게 Sub
의 baz
외부 이동
Public Class Foo
Public Sub Bar
Dim baz = New With { .Str = "String", .I = 314 }
End Sub
End Class
당신은 할 수 없습니다 :이 단지 하나의 방법 내에서 작동합니다. 물론 Object
에는 익명 형식의 인스턴스도 포함될 수 있습니다.
개체를 복사해야하거나 전달 된 함수로 수정하지 않으려면 구조가 훌륭하다고 생각합니다. 전달 된 함수는 원래 전달 된 구조를 수정할 수 없으므로 대신 새 복사본이 있으므로 이는 생명의 은인이 될 수 있습니다. (ByRef로 명시 적으로 통과하지 않는 한) .NET에서의 심한 복사 열광 또는 ICloneSomething 구현의 통증 구현 문제를 줄일 수 있습니다.
그러나 일반적인 생각은 더 의미 론적 방법으로 맞춤 데이터 구조를 정의하는 것입니다.
클래스로 이동하는 경우 클래스의 일부가 될 클래스로 이동하는 경우 일반적으로 구조가 관련되지 않은 클래스 중 99 %와 관련하여 99 %이므로 네임 스페이스.
클래스로 변환하는 경우 "데이터를 strcuture로 정의하는 것"과 "비용이 많이 드는가"를 고려해야합니다. 그 곳 곳곳에 복사 될 것이기 때문에 "당신은 통행인에 의해 수정 된 것에 영향을 받기를 원합니까?"
Marc와 Rex가 참조하는 사용 지침은 어떤 것이 좋을지 잘 모르는 훌륭한 커버 케이스입니다. 구조체의 사용이 요구 사항 인 인 몇 가지 유스 케이스를 나열합니다.
이 일반적으로 (경우 에지되고 interop 제외) 프로젝트/프로그램의 성공을 위해 이 필요하다면이 필요하지 않은 한 권장 관행이 아님