2013-09-27 7 views
4

안녕하세요, 모두리플렉션을 통해 겉보기에 공개 속성에 액세스하기

클래스의 공용 속성에 액세스하려는 시도가 어떤 문제인지 결정하는 데 어려움을 겪고 있습니다.

내 필요성은 매우 기본입니다. 내 일상에 올바르게 구현 된 공용 클래스가 있는데, 리플렉터 덕분에이 클래스에는 내가 참조해야하는 속성이 있다는 것을 알았습니다.

문제는 속성을 이렇게 정의되어있다 :

public Vector3 root { 
    [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; 
    [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; 
} 

내가 직면하고있어 문제는 속성을 가져에서 내 모든 시도가 단순히 실패 할 것입니다. 나는 유형을 인스턴스화, 및 바인딩 플래그

Type vtype = myobj.getType() 
PropertyInfo[] vproperties; 
vproperties = vtype.GetProperties();//(BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic); 
for (int vpropertycounter =0 ; vpropertycounter < vproperties.Length ; vpropertycounter++) { 
    Console.write(varbodyproperties[varpropertycounter].Name); <= 'root' never appears in this list 
} 

내 의심과 의심의 여지가 공전의 getter 및 setter는 'wrapperless 때문에 루트 속성이'공개 대상 '하지 않을 수 있다는 사실 주위의 모든 가능한 조합을 시도했습니다 '및'내부 '. 슬프게도 이것이 극복 할 수 있을지 모르겠다.

이 속성에 꼭 액세스 할 수 있는지, 가능하면 어떻게 할 수 있는지 알고 싶습니다.

모든 의견을 환영합니다.

미리 감사드립니다.

참고 : "myobj.root"와 같이 속성을 직접 지정하면 알 수없는 속성에 대한 컴파일러 오류가 발생합니다.

답변

1

MethodImplOptions.InternalCall의 메소드는 일반적으로 내부 프레임 워크 메소드입니다. 직접적으로 또는 리플렉션을 통해 호출 할 수 없습니다 (다소 차이는 있습니다).

라이브러리에 따라 다르지만 VB에서 내부적으로 사용하는 Word API에서는 이와 비슷한 것을 발견했습니다. 변형 속성에 액세스하려면 예를

Property = "" <- doesn't work 
set_Property("") <- works 

에 대한 세터 메소드를 호출해야하는 것은 당신이 그 후임자가 그 외에도

을 구현하는 경우 내가 추측에 액세스하려고하는 API에 따라 다름, 아마 읽기 Platform Invoke Tutorial

+0

당신의 제안에 감사 드리며, 저는 실제로 setter와 getter를 호출 할 수 있다는 것을 깨달았습니다. 그래서 반사 반복을 위해 잘못된 유형을 사용하고 있다는 것을 알았습니다! – roamcel