2016-08-17 3 views
0

유형의 메소드 테이블에 다음 유형이 포함되어 있습니다. (1) 메소드가 해당 유형에 새로 정의되었습니다. (2) 기본 유형에 정의 된 가상 메소드.메소드 테이블에 기본 클래스의 가상 메소드 만 들어있는 이유는 무엇입니까?

다른 언어 (예 : C++)의 가상 테이블과 마찬가지로 가상 메소드 만 테이블에 저장해야한다는 것을 완전히 이해할 수 있습니다. 그러나 C#의 경우 메서드 테이블이 가상 테이블과 정확히 일치하지 않기 때문에 형식에 새로 정의 된 비 가상 메서드가 해당 형식의 메서드 테이블에 존재하기 때문에 가상 테이블과 정확히 일치하지 않습니다. 따라서 나는 왜 C#의 메소드 테이블이 그런 식으로 디자인되어 졌는지 궁금하다. 비어 있지 않은 기본 형식의 메서드는 저장되지 않고 형식 자체의 메서드는 저장되지 않는 이유는 무엇입니까?

감사합니다.

+0

거기에 문제가 있습니까? 왜 테이블에 가상이 아닌 메소드를 갖고 싶습니까? 무엇 때문에? 질문은 학계 (예 : 'C#'컴파일러를 구현하는 사람) 또는 무의미한 사람 (예 : '이유'를 묻는 사람)이 있습니다. – Sinatr

+3

기본 클래스 메소드 테이블에 이미 있기 때문에 반복 할 필요가 없습니다. CLR은 그 자체로 이것을 파악할 수 있지만 컴파일러가 이미 기본 클래스 메서드를 호출하기 때문에 거의 수행 할 수 없습니다. 물론 가상 메소드에는 사용할 수 없습니다. 메소드 바인딩은 커다란 털이 많은 이야기이며, 특히 인터페이스 구현 방법이 바운드되는 방식은 매우 복잡합니다. 의심 할 여지없이 누구나 그 매뉴얼을 쓸 것입니다. –

답변

-1

vtable가상의 방법입니다. 가상이 아닌 메소드는 정적으로 분석 될 수 있으므로 조회 테이블이 필요하지 않습니다.

+2

메서드 테이블! = vtable, 확실히 .NET에서 비 가상 메서드가 포함되어 있습니다. –