Как Вы получаете все свойства класса и его базовых классов (иерархия) с Отражением? (C#)

Из platform_frameworks_base / core / java / android / hardware / usb / UsbManager.java :

Константа помечена как @UnsupportedAppUsage, указывая, что она не предназначена для воздействия / используется приложениями. Это, вероятно, означает, что она не гарантируется стабильной во всех версиях.

Кроме того, намерение указывает состояние соединения USB с хостом, а не состояние OTG USB.

Javadoc для UsbManager говорит:

Этот класс позволяет вам получить доступ к состоянию USB и обмениваться данными с USB-устройствами. В настоящее время в общедоступном API поддерживается только режим хоста.

blockquote>

И для ACTION_USB_STATE:

Broadcast Action: Липкая передача для событий изменения состояния USB в режиме устройства.

Это липкая широковещательная рассылка для клиентов, которая включает в себя состояние подключения / отключения USB,

  • "connected" логическое значение, указывающее, подключен или отключен USB.
  • "host_connected" логическое значение, указывающее, подключен или отключен USB как хост.
  • "configured" логическое значение, указывающее, настроен ли USB. в настоящее время ноль, если не настроен, один для настроенного.
  • "adb" логическое значение, указывающее, включена ли функция adb.
  • "rndis" логическое значение, указывающее, включена ли функция RNDIS ethernet.
  • "mtp" логическое значение, указывающее, включена ли функция MTP. активирован
  • USB_FUNCTION_PTP логическое значение, указывающее, включена ли функция PTP
  • "ptp" логическое значение, указывающее, включена ли дополнительная функция
  • "audio_source" логическое значение, указывающее включена ли функция аудиоисточника
  • "midi" boolean extra, указывающая, включена ли функция MIDI

Если липкое намерение не найдено, это означает, что USB отключен, USB не настроен, функция MTP включена, а все остальные функции отключены.

BLOCKQUOTE>

26
задан Konrad Rudolph 28 October 2008 в 22:45
поделиться

5 ответов

Используйте это:

PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

РЕДАКТИРОВАНИЕ: Конечно, корректный ответ имеет что Jay. GetProperties() без параметров эквивалентно GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static ). Эти BindingFlags.FlattenHierarchy не играет роли здесь.

25
ответ дан 28 November 2019 в 07:06
поделиться

Я не думаю, что это, это усложнило.

, Если Вы удаляете BindingFlags параметр в GetProperties, я думаю, что Вы получаете результаты, которые Вы ищете:

    class B
    {
        public int MyProperty { get; set; }
    }

    class C : B
    {
        public string MyProperty2 { get; set; }
    }

    static void Main(string[] args)
    {
        PropertyInfo[] info = new C().GetType().GetProperties();
        foreach (var pi in info)
        {
            Console.WriteLine(pi.Name);
        }
    }

производит

    MyProperty2
    MyProperty
15
ответ дан 28 November 2019 в 07:06
поделиться

Если вы получите доступ к Type.BaseType, вы можете получить базовый тип. Вы можете получить рекурсивный доступ к каждому базовому типу, и вы узнаете, когда достигли дна, когда ваш тип System.Object.

Type type = obj.GetType();
PropertyInfo[] info = type.GetProperties(BindingFlags.Public);
PropertyInfo[] baseProps = type.BaseType.GetProperties(BindingFlags.Public);
5
ответ дан 28 November 2019 в 07:06
поделиться

Я был бы склонен соглашаться с Nicolas; если Вы не знаете о необходимости в отражении тогда ComponentModel жизнеспособная альтернатива, с преимуществом, что Вы получите корректные метаданные даже для моделей во время выполнения (такой как DataView / DataRowView).

, Например:

    foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(obj))
    {
        Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(obj));
    }

Как в стороне, можно также сделать немного простые приемы производительности с этим; можно сделать то же с отражением и Delegate.CreateDelegate, но нет никакого централизованного места для скрытия логики, в отличие от этого TypeDescriptor с TypeDescriptionProvider (не волнуйтесь, незнакомы ли они; можно просто использовать код как есть "";-p).

3
ответ дан 28 November 2019 в 07:06
поделиться

Использование:

TypeDescriptor.GetProperties(obj);
2
ответ дан 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: