짧은 대답 당신은 아무것도 가져올 필요가 없습니다
. 암시 적 및 명시 적 C# 변환과 "동적"키워드를 사용하십시오. D Hoerster의 답이 맞습니다.
긴 대답
C#을 동적 객체를 처리하기 위해 별도의 유형이 - 타입은 "동적"입니다. 그러나 VB에서는 동적 인 동작이 늦은 바인딩을 통해 구현되기 때문에 이에 대한 전용 유형이 없습니다. 그래서 VB에서 실제 동적 바인딩을 필요로하는 동적 객체는 때때로 "객체"와 구별하기가 어렵습니다. CType은 "개체"를 유형으로 변환합니다. 대부분의 경우 괜찮습니다. 그러나 IDynamicMetaObjectProvider 인터페이스의 구현을 처리 할 때 문제가 발생할 수 있습니다. CType은 "개체"또는 "동적 개체"를 처리하는지 이해할 수 없습니다. 다른 개체와 구별 할 구문이 없으며 CType은 후기 바인딩을 통해 정의 된 모든 개체에 대해 동적 바인더를 호출하지 않으려 고합니다. 그것은 다루는 모든 객체가 "동적 객체"가 아니라 "객체"라고 가정합니다. 그래서 어떻게 든 컴파일러가 동적 객체를 다루고 있음을 알 필요가 있습니다. 새로운 "동적"유형을 만드는 대신 VB 팀은 하나의 변환 기능 (CTypeDynamic)을 추가하기로 결정했습니다.이것은 동적 유형을 다른 유형으로 변환한다는 것을 컴파일러에게 명시 적으로 알려줍니다 (다시 말하지만 C#에서는 동적 키워드를 사용하여 객체를 이미 정의 했으므로 컴파일러는 이미 그 내용을 알고 있기 때문에 필요하지 않습니다).
문제의 좋은 예는 DynamicObject.TryConvert 방법입니다. VB 예제에서 CTypeDynamic을 CType으로 바꾸면 예외가 표시됩니다. 다시 말하지만 CType은 동적 런타임 바인더에 대해 아무것도 모르기 때문입니다. 그러나 C#에서는 런타임 바인더가 dynamic 키워드에 의해 정의 된 모든 객체에 대해 호출되므로이 특수 함수가 필요하지 않습니다.
그래, 내가 찾은 CTypeDyamic 예제를 위해 일하는 것이 를 사용하여 변환을 수행하려고합니다. 여전히 '동일'한지 궁금해합니다. –
IDynamicMetaObjectProvider를 구현하여 사용자의 요구에 맞춰줍니다. –
C#이 C# 런타임 바인더를 사용하고 VB는 VB 런타임 바인더를 사용하므로 정확히 동일하지는 않습니다. – codekaizen