void
구성 할 수없고 일반적인 유형으로 허용되지 않는 것을 선호하는 디자인 결정은 무엇입니까 ? 어쨌든 그것은 단지 특별한 공허한 struct
것이며 구별 Func
되고 Action
대의원 을 갖는 총 PITA를 피했을 것 입니다.
(C ++은 명시적인 void
리턴을 허용 void
하고 템플리트 매개 변수로 허용합니다 )
void
구성 할 수없고 일반적인 유형으로 허용되지 않는 것을 선호하는 디자인 결정은 무엇입니까 ? 어쨌든 그것은 단지 특별한 공허한 struct
것이며 구별 Func
되고 Action
대의원 을 갖는 총 PITA를 피했을 것 입니다.
(C ++은 명시적인 void
리턴을 허용 void
하고 템플리트 매개 변수로 허용합니다 )
답변:
"void"의 근본적인 문제는 다른 반환 유형과 같은 의미가 아니라는 것입니다. "void"는 "이 메소드가 리턴하면 값을 전혀 리턴하지 않음"을 의미합니다. null이 아닙니다. null은 값입니다. 어떤 값도 반환하지 않습니다.
이것은 실제로 타입 시스템을 망칩니다. 유형 시스템은 본질적으로 특정 값에 어떤 연산이 유효한지 논리적으로 추론하기위한 시스템입니다. void 반환 메서드는 값을 반환하지 않으므로 "이 작업에 어떤 작업이 유효한가요?"라는 질문 전혀 이해가되지 않습니다. 작업이 유효하거나 유효하지 않은 "것"이 없습니다.
또한, 이것은 런타임에 치열한 무언가를 망칩니다. .NET 런타임은 스택 머신으로 지정된 Virtual Execution System의 구현입니다. 즉, 작업이 모두 평가 스택에 미치는 영향 측면에서 특징이있는 가상 시스템입니다. (실제로 머신은 스택과 레지스터가 모두있는 머신에서 구현되지만 가상 실행 시스템은 스택 만 가정합니다.) void 메소드 호출의 효과는 근본적으로비 공백 메소드 호출의 효과와 다릅니다. 무효가 아닌 메소드는 항상 스택에 무언가를 넣습니다. void 메소드는 스택에 무언가를 넣지 않습니다. 따라서 메소드의 리턴 값이 무시되는 경우 컴파일러는 void 및 non-void 메소드를 동일하게 처리 할 수 없습니다. 메소드가 void이면 리턴 값이 없으므로 pop이 없어야합니다.
이러한 모든 이유로 "void"는 인스턴스화 할 수있는 유형이 아닙니다. 그것은 가치 가 없습니다. 그것은 요점입니다. 객체로 변환 할 수 없으며 void 반환 메소드는 스택을 손상시키기 때문에 무효가 아닌 리턴 메소드로 다형성으로 처리 될 수 없습니다!
따라서 void는 유형 인수로 사용할 수 없으며 이는 아시다시피 수치입니다. 매우 편리합니다.
후시의 이점으로, 아무것도 반환하는 대신 아무것도 반환하지 않으면 공허 반환 방법이 자동으로 마법의 싱글 톤 참조 유형 인 "Unit"을 반환하는 것이 더 좋을 것입니다. 그런 다음 모든 메소드 호출이 스택에 무언가를 넣는 것을 알 수 있습니다. 모든 메소드 호출은 객체 유형의 변수에 할당 될 수있는 것을 반환 하며 물론 Unit은 유형 인수로 사용될 수 있음을 알고 있습니다. 별도의 Action 및 Func 델리게이트 유형이 필요하지 않습니다. 슬프게도, 그것은 우리가 속한 세상이 아닙니다.
이 정맥에 대한 더 많은 생각은 다음을 참조하십시오.
Void
0 스택 바이트 내에서 무한한 양의 인수로 전달되도록해도 좋습니다. 구조가 object
메소드를 변환 하거나 메소드를 호출 해야하는 경우 (get this
) Type
메모리 필드 영역 앞에 삽입 된 참조가 있는 힙에 배치하여 상자를 작성하여 (많은 CLR 구현의 경우) 올바르게 처리 할 수 있습니다. 나에 관해서는 유형은 일부 특성 (필드)으로 구별 할 수있는 객체 그룹입니다. Void
단지 하나의 객체입니다.
void
빈 값 타입이라면, 그 문장은 기계 코드의 제로 명령으로 번역 될 것입니다. 의 하드 코딩 된 유형에는 유용하지 Void
않지만 유형에 여러 일반 매개 변수가 있지만 특정 경우에는 필요하지 않은 경우에 유용합니다.
이것은 실제로 의도적으로 설계된 것입니다-우리는 void 유형의 인스턴스를 허용하지 않습니다 (런타임의 많은 다른 유형과 함께). void 또는 void [] 인스턴스를 만들 수 없습니다. 보안을 위해 이러한 유형의 구멍을 막았습니다.
나는 내 인생에서 공허가 얼마나 안전한지 알 수는 없지만 ... 그런데.