Доступ к, казалось бы, публичной собственности через рефлексию
Добрый день всем,
Я изо всех сил пытаюсь определить, в чем проблема с попыткой получить доступ к общедоступной собственности в классе.
Моя потребность очень проста. У меня есть публичный класс, который правильно создан в моей программе, и я знаю, благодаря отражателю, что у этого класса есть свойство, на которое я должен ссылаться.
Проблема в том, что свойство определяется так:
public Vector3 root {
[MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get;
[MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set;
}
Проблема, с которой я сталкиваюсь, состоит в том, что все мои попытки получить собственность просто терпят неудачу. Я создал экземпляр Type и попробовал все возможные комбинации флагов привязки
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
}
Мои подозрения и сомнения вращаются вокруг того факта, что корневое свойство не может быть "видимым", потому что его методы получения и установки являются "безоберточными" и "внутренними". К сожалению, я не знаю, можно ли это преодолеть или нет.
Я хотел бы знать, можно ли получить доступ к этому свойству, и, возможно, как это сделать.
Все отзывы приветствуются.
Заранее спасибо.
ПРИМЕЧАНИЕ: обращение к свойству напрямую, как в "myobj.root", приводит к ошибке компилятора для неизвестного свойства.
1 ответ
Методы с MethodImplOptions.InternalCall
обычно это методы внутренней структуры. Вы не можете вызывать их напрямую или с помощью рефлексии (что более или менее одно и то же).
Это зависит от библиотеки, я нашел что-то подобное в Word API, где он использует VB. Чтобы получить доступ к вариантным свойствам, вам нужно вызвать метод установки, например
Property = "" <- doesn't work
set_Property("") <- works
Зависит от API, к которому вы пытаетесь получить доступ. Я полагаю, если эти преемники реализованы
Помимо этого, возможно, прочитайте учебник по вызову платформы