Com Interop과 dynamic에 대한 IDE의 지원

어제 포스트에서 제가 C# 4.0에 새로 지원 되는 주 기능으로 Com interop과 dynamic을 얘기 하면서 그에 대한 IDE의 새 기능을 쓰기로 해 놓고 C# 4.0에서 새로 지원 되는 Compiler 기능만 쓰고 이에 대한 IDE 기능은 전혀 쓰질 않았죠 ㅡ.ㅡ.

 

이유는 사실 dynamic의 경우 IDE 에서 해 줄수 있는게 별로 없기 때문이기도 합니다.

 

이 Com Interop이나 dynamic이 C# 언어 쪽에서 본다면 여러 dynamic 언어들을 무척 간단하게 사용할수 있게 해 주는 반면 IDE 쪽에서는 별로 크게 도움을 줄만한게 없습니다. IDE에서 제공 하는 intellisense 라는게 static 한 타입 정보들이 있어야 보여 줄수 있는건데 dynamic 의 경우 다 runtime에 타입들이 정해지는거라 design time에 IDE가 해줄수 있는거라곤 사실 별로 없죠.

 

그래서 이로 인해 새로 들어간 IDE 기능이라고 해 봤자,

  1. ref 나 optional parameter처럼 생략 할수 있는 정보들의 경우, parameter help 및 그 와 비슷한 곳에서 “[]”로 옵션 항목임을 표시해 줍니다.
    image
  2. No PIA의 경우는 프로젝트 Property 페이지에 아래와 같은 새 옵션이 들어가게 됐구요. 한가지 알아 두셔야 할 것은, No PIA 옵션을 사용할 경우, COM interface에 들어 있는 모든 object 타입이 자동으로 dynamic 타입으로 변환 됩니다.
    image
  3. Named and Optional Parameter의 경우는 method를 정의하거나 부를때 아래처럼 사용할수 사용하실수 있게 됐습니다.
     image
  4. Refactoring 기능들의 경우, 새로운 named and optional parameter 들을 지원 할수 있게 변경 됐습니다. 특히 signature change의 경우는 아래와 같이 새로운 dialog를 갖게 됐구요.
    image
  5. Dynamic invocation의 경우는 아쉽게도 intellisense가 지원되지 않습니다. 다만, 현재 사용하는 expression이 dynamic 구문이라는걸 알려주기 위해 아래처럼 표시를 해줍니다.
     image
  6. QuickInfo의 경우도 역시, 현재 마우스 밑에 있는 구문이 dynamic expression이라는것만 알려줍니다.
    image
  7. Edit and Continue 역시, 현재로써는 method block안에 dynamic invocation 이 있을 경우, EnC를 사용할수 없도록 되어 있습니다.
    image
  8. Refactoring 역시 dynamic member들의 경우 지원 되지 않습니다. Go to definition 역시 지원되지 않구요. 이유는 당연히 design time에 타입이 무엇인지 모르므로, member들 역시 마찬가지구요. 따라서 아무것도 지원되지 않습니다.

아마 이정도가 C# 4.0의 새로운 기능인 COM interop과 dynamic을 위해 새로 들어간 IDE기능들인거 같습니다. 비록 이번 버젼에는 이정도 밖에 지원하지 않지만, 내부적으로는 어떻게 해야 dynamic 타입을 static 정보가 존재 하는 기존 C# construct들 만큼은 정보들을 제공할수 있을까 논의 중입니다. F#의 interactive window와 비슷한 뭐 그런것 말이죠.

 

그럼 도움 되었음 좋겠네요.

수고.