문제

현재 C#의 2nd 에디션을 깊이 연구하고 있으며 "동적 프로토콜 버퍼", 즉 기존 프로토콜 버퍼 라이브러리 위에서 동적 지원 수준을 구현하려고 노력하고 있습니다. 따라서 나는 a DlrMessage 파생 된 유형 DynamicObject. 약간의 연주를 마친 후에는 코드가 거의없는 간단한 속성에 응답 할 수 있었지만 훨씬 더 나아가서 무슨 일이 일어나고 있는지 실제로 이해하고 싶습니다.

지금까지 나는 DLR에 대한 좋은 설명을 찾지 못했습니다. 이전 CTP와 .NET 4.0 베타 1 사이의 상황이 바뀌었기 때문에 많은 블로그 게시물이 효과적으로 끝났습니다. DynamicObject에 대한 MSDN 문서 현재는 꽤 최소입니다.

가장 즉각적인 쿼리는 "이 특정 객체를 사용하여 처리 할 수없는 전화를 묶기 위해 반사를 사용하여 반사를 사용하십시오."라는 간단한 방법이 있는지 여부입니다. (다시 말해, 가능하다면 모든 것을 직접 수행하기보다는 기존의 반사 바인딩을 강화하고 싶습니다.) 불행히도 나는 추측에 따라 멀지 않습니다.

내가 알아야 할 결정적이고 최근의 문서 출처가 있습니까? 나는 새로운 기술에 대해 글을 쓰는 것의 부분을 알고 있습니다. ~이다 탐험, 그러나 도움의 손길은 감사 할 것입니다 :)

도움이 되었습니까?

해결책

내가 찾아서 자주 읽은 최고의 소스는 지난 몇 년 동안 Chris Burrow의 게시물입니다. 그의 블로그.

또한 있습니다 공식 DLR 문서 페이지 꺼져 있습니다 메인 DLR 사이트.

다른 팁

나도 현재 이것을 조사하고 있으며 아직 너무 많은 정보가 없습니다. 나는 당신의 쿼리를 도울 수 없지만 아래는 내가 찾은 몇 가지 정보입니다.

PDC 비디오 내에는 상당한 금액이 있습니다.

http://channel9.msdn.com/pdc2008/tl44/

http://channel9.msdn.com/pdc2008/tl10/

이 기사는 DLR이 Ironpython과 어떻게 작동하는지에 대해 설명합니다.http://msdn.microsoft.com/en-us/magazine/cc163344.aspx

훈련 키트 미리보기에는 다음과 같은 소량이 있습니다. http://www.microsoft.com/downloads/details.aspx?familyid=752cb725-969b-4732-a383-ed5740f02e93&displaylang=en

도움이 되었기를 바랍니다

알렉스

기본적으로 DynamicObject는 시도* 함수가 False를 반환하면 "반사 방향"이라고 말합니다. 따라서 이미 동적 경로가 조회하지 않으면 반사로 처리 할 속성/필드/메소드를 서브 클래스에 상속하고 추가 할 수 있습니다.

더 깊이 진행하면 idynamicmetaobjectprovider를보고 싶을 수도 있습니다. 이 낮은 수준에서 반사에 대한 폴백은 들어오는 DynamicmetaoBjetbinder에서 폴백* 메소드를 호출하는 것입니다. 그런 다음 호출 언어가 해상도를 제공 할 수 있습니다. 그런 다음 해당 AST를 반환하거나 반환 할 수있는 더 큰 AST로 구성 할 수 있습니다. 기본적으로 폴백* 호출 언어가 올바른 오류 (예외, JS에서 정의되지 않은 등)를 포함하여 생성하는 AST를 얻을 수 있습니다.

DynamicObject가 반사에 대한 폴백을 수행하는 방식은 실제로 바인더의 폴백* 메소드를 두 번 호출한다는 것입니다. 처음으로 "오류가 발생한"매개 변수없이 뒤로 떨어집니다. 이것은 반사를 사용하여 구축 된 오류 또는 AST를 얻습니다. 그런 다음 다음과 같은 AST를 생성합니다.

if(TryGetMember("name", out value)) {
   return value;
} else {
   return resultOffallback;
}

그런 다음이 결합 된 AST를 가져 와서 실제로 두 번째 폴백의 바인더에 대한 오류 제안으로 건네줍니다. 그런 다음 바인딩이 실패한 경우 바인더는이 오류를 존중해야합니다. 그러나 .NET 멤버가 존재하면 오류가 발생하고 .NET 바인딩이 우선합니다. 마지막으로 언어가 바인딩이 성공했는지 알지 못하면 (예 : 언어에 "메소드 누락"유형 기능이 있음) 동적 검사와 AST를 다시 결합 할 수 있습니다. 따라서 폴백을 사용하면 반사를 할뿐만 아니라 동적 또는 정적 멤버가 우선하는지 여부를 선택할 수 있습니다.

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