때때로 Jon Skeet 및 Eric Lippert와 같은 사람들이 쉽게 대답 할 수있는 스택 오버 플로우의 에지 케이스 및 기타 이상한 점에 대한 질문을 보았습니다. 이 언어와 그 복잡한 것에 대한 깊은 지식을 보여줍니다 .
당신은 사용하기 위해 생각할 수도
foreach
루프를 컬렉션이 구현해야하는 이상 반복된다IEnumerable
거나IEnumerable<T>
. 그러나 실제로는 이것이 요구 사항이 아닙니다. 컬렉션의 형식에는이라는 공용 메서드GetEnumerator
가 있어야하고 공용 속성 getter가있는 형식과을 반환하는Current
공용 메서드가MoveNext
있어야합니다bool
. 컴파일러가 이러한 요구 사항을 모두 충족한다고 판단 할 경우 해당 메소드를 사용하도록 코드가 생성됩니다. 이러한 요구 사항은 우리가 객체가 구현하고 있는지 확인합니까 충족되지 않은 경우에만IEnumerable
나IEnumerable<T>
.
알아두면 좋은 일입니다. Eric이 왜 이것을 알고 있는지 이해할 수 있습니다. 그는 컴파일러 팀에 있기 때문에 알아야합니다. 그러나 내부자가 아닌 그러한 깊은 지식을 보여주는 사람들은 어떻습니까?
C # 컴파일러 팀에 소속되지 않은 필사자 만이 어떻게 이런 것들을 알아낼 수 있습니까?
구체적으로, 이러한 사람들이 그러한 지식을 체계적으로 뿌리 뽑고 탐구하고 내면화하는 데 사용하는 방법이 있습니까?