Доступ к, казалось бы, публичной собственности через рефлексию

Добрый день всем,

Я изо всех сил пытаюсь определить, в чем проблема с попыткой получить доступ к общедоступной собственности в классе.

Моя потребность очень проста. У меня есть публичный класс, который правильно создан в моей программе, и я знаю, благодаря отражателю, что у этого класса есть свойство, на которое я должен ссылаться.

Проблема в том, что свойство определяется так:

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, к которому вы пытаетесь получить доступ. Я полагаю, если эти преемники реализованы

Помимо этого, возможно, прочитайте учебник по вызову платформы

Другие вопросы по тегам