문제

C# 4.0에서 "Method-Missing"-내성 및 그와 같은 구현하려면 Idynamicobject를 구현해야합니다.

public interface IDynamicObject
{
  MetaObject GetMetaObject(Expression parameter);
}

내가 알아낼 수있는 한, idynamicobject는 실제로 DLR의 일부이므로 새로운 것이 아닙니다. 그러나 나는 그것에 대한 많은 문서를 찾을 수 없었습니다.

매우 간단한 예제 구현이 있습니다 (FX 여기 그리고 여기), 그러나 누구든지 더 완전한 구현이나 실제 문서를 지적 할 수 있습니까?

특히, "매개 변수"-파라미터를 정확히 어떻게 처리해야합니까?

도움이 되었습니까?

해결책

짧은 대답은 MetaObject가 실제로 통화 사이트에서 실행될 코드를 생성하는 데 책임이 있다는 것입니다. 이것에 사용하는 메커니즘은 LINQ 발현 트리이며, DLR에서 향상되었습니다. 따라서 객체로 시작하는 대신 객체를 나타내는 표현식으로 시작하며 궁극적으로 취할 작업을 설명하는 표현식 트리를 반환해야합니다.

이 작업을 수행 할 때 CTP의 System.core 버전은 8 월 말 스냅 샷에서 가져 왔음을 기억하십시오. 그것은 Ironpython의 특정 베타에 매우 깨끗하게 일치하지 않습니다. 그 이후로 DLR에 대한 여러 가지 변화가 이루어졌습니다.

또한 CLR V2 System.core와의 호환성을 위해 Beta 4 또는 Beta 5로 시작하여 Ironpython의 릴리스는 이제 시스템 네임 스페이스의 모든 이름을 대신 Microsoft 네임 스페이스에 바르십시오.

다른 팁

소스 코드를 포함한 엔드 투 엔드 샘플을 원한다면 사전에서 임의 속성에 대한 값을 저장하는 동적 객체를 만들어냅니다. 내 게시물 "C# 4.0의 오리 타이핑에 대한 첫 번째 모습" 당신에게 맞을 수 있습니다. 정적으로 입력 한 인터페이스에 동적 객체를 어떻게 캐스팅 할 수 있는지 보여주기 위해 그 게시물을 작성했습니다. 그것은 idynamicobject이고 iquack처럼 작용할 수있는 오리의 완전한 작업 구현을 가지고 있습니다.

더 많은 정보가 필요하면 내 블로그에서 저에게 연락하면 최대한 잘 도와 드리겠습니다.

방금이 작업을 수행하는 방법에 대해 블로그를 작성했습니다.

http://mikehadlow.blogspot.com/2008/10/dynamic-dispatch-in-c-40.html

지금까지 내가 알아 낸 내용은 다음과 같습니다.

동적 언어 런타임은 현재 Ironpython 프로젝트. 그래서 이것이 정보를 얻기 가장 좋은 곳입니다.

Idynamicobject를 지원하는 클래스를 구현하는 가장 쉬운 방법은 Microsoft.scripting.actions.dynamic 함수 호출 시맨틱을 구현하기 위해 콜 메드와 같은 관련 방법을 무시합니다. CTP에는 Microsoft.scripting.actions.dynamic이 포함되지 않은 것처럼 보이지만 Ironpython 2.0의 것은 작동하는 것처럼 보입니다.

나는 여전히 "매개 변수"-파라미터의 정확한 의미에 대해 불분명하지만, 동적 객체의 바인딩에 대한 맥락을 제공하는 것으로 보인다.

이 프레젠테이션은 또한 DLR에 대한 많은 정보를 제공합니다.

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