유형으로 void . 왜 지구상에서 유형이 "무효"입니까? 인스턴스가없고 값이 없으며 일반 유형 인수, 형식 매개 변수 유형, 로컬 유형, 필드 유형 또는 특성 유형으로 사용할 수 없습니다. 유형으로서의 의미는 없습니다. 오히려 메서드 호출이 가상 시스템의 스택 에 어떤 영향을 미치는지 에 대한 사실 입니다. 그러나 가상 머신은 바로 가상 머신입니다. 실제 머신은 반환 된 값을 레지스터 (일반적으로 x86의 EAX)에 넣고 스택에 전혀 영향을 미치지 않습니다! 유형으로서의 무효는 단지 나쁜 생각입니다.
더 나쁜 : 같이 포인터 타입에 사용하면 void*
뭔가 의미 완전히 다른 반환 유형으로 사용될 때 그것은 무엇을 의미하는지에 비해합니다. 이제 "알 수없는 유형의 저장 위치에 대한 포인터"를 의미하며, "값을 반환하지 않는 메소드"라는 의미와는 아무런 관련이 없습니다.
void*
포인터 타입으로 대체 할 수 있습니다 IntPtr
. (그리고 void**
함께 IntPtr*
등등.) 우리는 "단위", 단일 값, 즉, 널 (null)이있는 유형의 반환 형식으로 무효 교체 할 수 있습니다. CLR의 구현은 "반환되는"널이 안전하게 무시 될 수 있다는 것을 알면서 단위 유형 함수 호출이 레지스터 또는 스택의 사용을 적절하게 최적화 할 수 있다고 결정할 수 있습니다.
이러한 세계에서는 더 이상 분리 할 필요가 없다 Func<A, R>
와 Action<T>
위임한다. Action<T>
그냥 Func<T, Unit>
입니다.