문제

C# 4에서 idynamicobject를 구현했으며 간단한 속성 getter/setter dispatch를 사전으로 수행하는 사용자 정의 메타 - 바닥 서브 클래스를 반환합니다. 로켓 과학이 아닙니다.

내가 이것을한다면 :

dynamic foo = new DynamicFoo();

foo.Name = "Joe";

foo.Name = "Fred";

Console.WriteLine(foo.Name);

그런 다음 'Joe'가 콘솔에 인쇄됩니다 ... '이름'세터에 대한 두 번째 호출은 결코 호출되지 않습니다 (내 사용자 지정 디스패처 코드로 전혀 밟지 마십시오).

DLR이 캘리퍼 캐싱을 수행한다는 것을 알고 있지만 여기에는 적용되지 않을 것이라고 가정했습니다. 무슨 일이 일어나고 있는지 아는 사람 있나요?

도움이 되었습니까?

해결책

이 경우 (BIND) SETMEMBER에서 돌아 오는 메타 브리저는이 경우 캐시 및 재사용됩니다. 세트를 수행하는 2 개의 동적 사이트가 있습니다. 첫 번째 호출은 새로운 규칙을 작성하도록 요청하기 전에 두 번째 사이트가 픽업 할 L2 캐시에서 결과를 캐시합니다.

따라서 돌아 오는 메타 버젝트에는 값을 업데이트 할 표현 트리가 포함되어야합니다. 예를 들어 다음과 같은 작업을 수행해야합니다.

새로운 메타 버젝트 (expression.assignproperty (this.expression, value.expression), 제한 .typerestriction (this.expression, this.value.getType ());

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