BindingFlags и наследование интерфейсов - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! В общем BindingFlags. Получаю список свойств:
PropertyInfo[] p = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
И все бы хорошо, но он не хочет видеть наследуемые свойства, например есть два интерфейса:
    public interface IRelized : IProductBaseble
    {
        /// <summary>
        /// Серийные номера проданных товаров (или их ид), тогда инт
        /// </summary>
        string SN { get; set; }
        /// <summary>
        /// Дата продажи
        /// </summary>
        DateTime theDate { get; set; }
    }
 
    public interface IProductBaseble
    {
        [ForReady.Libraries.DisplayedToNewForm("Артикул")] int Art { get; set; }
        [ForReady.Libraries.DisplayedToNewForm("Наименование")] string Name { get; set; }
        /// <summary>
        /// В списке товаров к продаже - количество товаров на складе изначально (не остаток)ъ
        /// В продажах - количество проданного товара в конкретной реализации
        /// </summary>
        [ForReady.Libraries.DisplayedToNewForm("Количество")] int theCount { get; set; }
        /// <summary>
        /// В списке товаров к продаже - стоимость товаров на складе изначально (не остаток)ъ
        /// В продажах - стоимость проданного товара в конкретной реализации
        /// </summary>
        [ForReady.Libraries.DisplayedToNewForm("Стоимость")]double Secondcost { get; set; }
    }
Получаю свойства:
PropertyInfo[] p = typeof(IRelized).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
на выходе только SN и theDate. Пробовал убрать DeclaredOnly, тоже не помогает. Видит только их. NonPublic тоже не помог

Решение задачи: «BindingFlags и наследование интерфейсов»

textual
Листинг программы
public static IEnumerable<PropertyInfo> GetPublicProperties(this Type type)
{
    if (!type.IsInterface)
        return type.GetProperties();
 
    return (new Type[] { type })
           .Concat(type.GetInterfaces())
           .SelectMany(i => i.GetProperties());
}

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы