문제

나는 최근에 코드 캠프 12에 참석했고, 그곳의 화자는 dynamic C# 4.0의 키워드 ~해야 한다 다이나믹 언어와 상호 작용하는 데만 사용됩니다. 나는 또한 정상적인 반사와 비교할 때 다소 느리다고 말했다.

그러나 Scott Hanselman이 동적 키워드가 "반사가 덜 고통스럽게 만든다"고 언급했습니다.

그렇다면 동적 코드에서 나오지 않는 객체를 반영 할 목적으로 동적 키워드를 사용하는 것이 허용됩니까?

도움이 되었습니까?

해결책

나는 "아니오"라고 말하지만, 그것을 미친 듯이 사용하지 마십시오. 실제로, dynamic 내가 벤치마킹 한 것에서 더 빠르게 기본 반사보다는 대의원을 유지하기 때문에 (반사를 사용하지 않고 Invoke 항상). 특히 두 가지 강점은 다음과 같습니다.

  • 일반적인 방법으로 호출 (MakeGenericMethod 기타는 너무 고통스러워)
  • 연산자에게 전화

그러나 인터페이스 등으로 필요한 작업을 수행하는 방법이 있습니다. dynamic 비 동체 유형에서는 실제로 오리 타자에 해당합니다. 이것은 a에서 유용합니다 매우 제한적입니다 일련의 시나리오; 대부분 : 인터페이스가 선호됩니다. 배제하지 마십시오.

의 단점 dynamic (미친 코드를 작성하지 않고) 유용하기 위해서는 컴파일 타임에서 이름을 알아야합니다. 종종 그렇지 않거나 우리는이 피클에 있지 않을 것입니다! 런타임시 이름 만 알면 다른 옵션이 있습니다 (Expression, Delegate.CreateDelegate, "Hyperdescriptor", DynamicMethod, 빠른 방법으로 데이터에 액세스하는 등.

다른 팁

오리 타이핑이 필요하다고 느끼고 실제로 컴파일 시간 유형 안전을 필요로하지 않으면 동적을 사용하십시오. C# 전용 코드 (ExpandoObject를 사용하여 XML과 같은 동적 데이터 소스를 쿼리하는 등)에 대한 새로운 사용법이 많이있을 것이라고 확신합니다. 나는 많은 새로운 사용법이 동일한 방식과 같은 방식과 같은 방식으로 불필요 할 것이라고 확신합니다.

성능과 관련하여 .NET 4의 DLR은 "빠른"동적 타이핑을 시도하고 있습니다. 항상 그렇듯이 빠르면 응용 프로그램 프로필을 시작할 때 알아낼 수있는 것입니다.

내가 아는 바에 따르면, 주된 이유는 dynamic C#에서 키워드가 소개되었습니다. 그러나 물론 반사에 사용될 수 있습니다 ...

대답은 동적 키워드는 Interop을위한 것이지만 동적 언어 인 Interop만을위한 것이 아니라는 것입니다. Com Interop은 단지 하나의 예입니다. C# Team 은이 기능을 사용하도록 COM Interop을 이미 수정했으며 이로 인해 Interop이 훨씬 쉬워졌습니다. 최근에 ASP.NET MVC 뷰가 비슷한 일을하고 있음을 알았습니다.

또한 동적 키워드의 다른 사용 사례를 보여주는 예를 게시했습니다.C# 4.0의 동적 : DynamicObject를 사용하여 래퍼 생성. 이들은 Freed가 이야기 한 예제의 유형입니다. XML 데이터와의 인터 로프를 단순화합니다.

"아니요"라고 말해야합니다. 보세요 http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx 예상치 못한 사용의 예.

동적 키워드는 COM과 동적 언어를 훨씬 쉽게 작업하기위한 것이었지만, 그렇다고해서 해당 영역으로 제한해야한다는 의미는 아닙니다. 성능이 진행되는 한 : 명심하십시오. 그러나 성능 문제가 생길 때까지 집중하지 마십시오. (이것은 시작하기 전에 성능을 무너 뜨릴 수있는 높은 수준의 설계 선택에 영향을 미치지 않는 낮은 레벨 세부 사항 중 하나입니다.)

편집하다

또한 좋은 언어 디자이너는 사람들이 언어 기능을 예기치 않은 방식으로 사용할 것이라는 사실을 알고 있습니다. 이것은 동적 동작을 가능하게하는 인터페이스를 만들었 기 때문에이 토론과 관련이 있습니다. 그들은 의도적으로 사람들이 "동적"키워드 기능에 거의 모든 것을 연결하도록 허용했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top