2010-12-22 6 views
1

리플렉션을 다이나믹과 함께 사용하고 싶습니다. 내가 COM을 사용하여 수신 객체를 액세스 다음 호출다이나믹 및 리플렉션

dynamic foo = External_COM_Api_Call()

이 있다고 할 수 있습니다.

String bar = foo.GetType().GetProperty("FooBar").GetValue(foo,null)

을하지만 난 PropertyInfo에 대한 널 점점 계속 :

지금은 그런 식으로 뭔가를해야만 할 싶습니다.

아이디어가 있으십니까?

답변

0

왜 때 당신이 직접 할 수 반사를 사용하여 :

dynamic 키워드의 전체 지점의
dynamic foo = External_COM_Api_Call(); 
string value = foo.FooBar; 

. 더 이상 반성 할 필요가 없습니다.

그리고 당신은 반사를 사용하려는 경우, 동적 사용하지 마십시오

class Program 
{ 
    static void Main() 
    { 
     var type = Type.GetTypeFromProgID("WScript.Shell"); 
     object instance = Activator.CreateInstance(type); 
     var result = (string)type 
      .InvokeMember("CurrentDirectory", BindingFlags.GetProperty, null, instance, null); 
     Console.WriteLine(result); 
    } 
} 
+0

동적 코드 :

object foo = External_COM_Api_Call(); string bar = (string)foo .GetType() .InvokeMember("FooBar", BindingFlags.GetProperty, null, foo, null); 

여기에 전체 작업 예입니다. 예를 들어 설정 파일 – Jaster

+0

@jaster를 통해 액세스 할 속성을 지정하고 싶다면 동적 인 것이 필요하지 않으며 순수한 리플렉션이 필요합니다. 나의 두 번째 예를 보라. –

+0

제공된 유형이 com 유형이므로이 기능이 작동하지 않습니다.) 이미 내 질문 사항에 예제를 적었습니다. – Jaster