2013-05-23 4 views
3

두 dll을 API 변경으로 비교하는 동안 동료가 일부 클래스에 두 개의 GetType() 메서드가 있음을 확인했습니다.왜 System.Exception shadow GetType()이 발생합니까?

// this method is required so Object.GetType is not made virtual by the compiler 
public new Type GetType() 
{ 
    return base.GetType(); 
} 

내가 System.Exception이 _Exception를 구현하는 것을 볼 수 있지만, 나는 GetType을 명시 적으로이 같으면 같은 그림자가 될 수있다 이유가 표시되지 않습니다

깊은 검사시

, 그것은 System.Exception 그림자 GetType을()가 밝혀 가상 어쨌든.

그렇다면 System.Exception shadow GetType()은 왜 발생합니까?

답변

1

shriek에서 언급 한 것과 COM과 관련이 있는지 확실하지 않지만 Object.GetType()을 가상으로 만들지 않아도됩니다.

비명의 대답의 두 번째 링크는 언급

하지만 this answer to another question은 더 명확하게 :

CLR을가 인터페이스의 메소드를 구현하는 모든 방법 (Ecma 335 Partition II 12.1) 가상해야해야합니다.

  • 기본 클래스의 메서드가 가상하지, 그러나 동일한 어셈블리에서 몰래 컴파일러는 실제로 는 가상 및 최종 만드는 경우

    .

System.Exception 경우 GetType을 그림자하지 않았다(), 객체에 대한 GetType을() 구현은 컴파일러에 의해 자동으로 가상의 방법으로 변환 될 것입니다.

+0

http://ericlippert.com/2013/05/23/the-mystery-of-the-inserted-method/ – SLaks

+0

예 - 그 이유는 다른 StackOverflow 질문을 발견 한 게시물 때문이었습니다. – FriendlyGuy

+0

왜 이것이 문제입니까? – IllidanS4

0

Look here 및 "긴"대답은 here입니다.

즉, System.Exception은 GetType-Method도 가지고있는 System.Runtime.InteropServices._Exception 인터페이스를 구현하므로 new- GetType-Method를 구현해야합니다.

+1

나는 그것이 왜 '새롭다'는 것이 확실하지 않다. GetType()을 숨기지 않고'_Exception'을 구현 한 클래스를 생성 할 수 있습니다. 또한 CLR은 두 번째 링크에서 언급 한 것처럼 자동으로이를 구현하는 것으로 보이지 않습니다. – FriendlyGuy

+0

http://stackoverflow.com/a/3477588/1260405이 게시물은 질문에 대한 답변 일 수 있습니다. 또한 System.Type은 이와 같이 수행되며 com 인터페이스도 구현합니다. – shriek