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 기능이라고 해 봤자,
- ref 나 optional parameter처럼 생략 할수 있는 정보들의 경우, parameter help 및 그 와 비슷한 곳에서 “[]”로 옵션 항목임을 표시해 줍니다.
- No PIA의 경우는 프로젝트 Property 페이지에 아래와 같은 새 옵션이 들어가게 됐구요. 한가지 알아 두셔야 할 것은, No PIA 옵션을 사용할 경우, COM interface에 들어 있는 모든 object 타입이 자동으로 dynamic 타입으로 변환 됩니다.
- Named and Optional Parameter의 경우는 method를 정의하거나 부를때 아래처럼 사용할수 사용하실수 있게 됐습니다.
- Refactoring 기능들의 경우, 새로운 named and optional parameter 들을 지원 할수 있게 변경 됐습니다. 특히 signature change의 경우는 아래와 같이 새로운 dialog를 갖게 됐구요.
- Dynamic invocation의 경우는 아쉽게도 intellisense가 지원되지 않습니다. 다만, 현재 사용하는 expression이 dynamic 구문이라는걸 알려주기 위해 아래처럼 표시를 해줍니다.
- QuickInfo의 경우도 역시, 현재 마우스 밑에 있는 구문이 dynamic expression이라는것만 알려줍니다.
- Edit and Continue 역시, 현재로써는 method block안에 dynamic invocation 이 있을 경우, EnC를 사용할수 없도록 되어 있습니다.
- Refactoring 역시 dynamic member들의 경우 지원 되지 않습니다. Go to definition 역시 지원되지 않구요. 이유는 당연히 design time에 타입이 무엇인지 모르므로, member들 역시 마찬가지구요. 따라서 아무것도 지원되지 않습니다.
아마 이정도가 C# 4.0의 새로운 기능인 COM interop과 dynamic을 위해 새로 들어간 IDE기능들인거 같습니다. 비록 이번 버젼에는 이정도 밖에 지원하지 않지만, 내부적으로는 어떻게 해야 dynamic 타입을 static 정보가 존재 하는 기존 C# construct들 만큼은 정보들을 제공할수 있을까 논의 중입니다. F#의 interactive window와 비슷한 뭐 그런것 말이죠.
그럼 도움 되었음 좋겠네요.
수고.