2013-09-27 2 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 
} 

Моего подозрения и сомнения вертится вокруг того, что корневая свойство не может быть «Запись видна», потому что его геттер и сеттер является «wrapperless 'и' internal '. К сожалению, я не знаю, можно ли это преодолеть или нет.

Я хотел бы знать, может ли это свойство быть доступным, и, возможно, как это сделать.

Вся обратная связь приветствуется.

Заранее спасибо.

ПРИМЕЧАНИЕ: обращение к объекту непосредственно, так как в «myobj.root» генерируется ошибка компилятора для неизвестного свойства.

ответ

1

Методы с MethodImplOptions.InternalCall обычно являются внутренними каркасными методами. Вы не можете называть их напрямую или через отражение (что более или менее одно и то же).

Это зависит от библиотеки, я нашел что-то вроде этого в Word API, где он использует VB внутри себя. Чтобы получить доступ к вариантным Properties вы должны вызвать метод сеттера, например

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

Зависит от API вы пытаетесь получить доступ, я предполагаю, если эти наследники реализуются

Помимо этого, может быть, читать Platform Invoke Tutorial

+0

Благодаря вашему предложению я понял, что могу на самом деле назвать сеттера и геттер, что привело меня к пониманию того, что я использовал неправильный тип для итерации отражения! – roamcel