Как правильно сравнивать Property Info?
От: mDmitriy Россия  
Дата: 05.10.15 14:16
Оценка: 5 (1)
Всем привет!

Есть примерно такой код:
class MyParent
{
    bool A {get; set;}
    bool B {get; set;}
    bool C {get; set;}
}
class MyChild : MyParent
{
    bool C {get; set;}
}

Надо получить список PropertyInfo класса MyChaild, которые не унаследованы из класса MyParent.
Нужен общий алгоритм.
Если есть какие-то приемы, подскажите, плиз...
Re: Как правильно сравнивать Property Info?
От: hardcase Пират http://nemerle.org
Дата: 05.10.15 14:22
Оценка: 3 (1) +1
Здравствуйте, mDmitriy, Вы писали:

D>Если есть какие-то приемы, подскажите, плиз...


1) проверять свойство DeclaringType
2) выгребать свойства из Type передавая BindingFlags.DeclaredOnly
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Как правильно сравнивать Property Info?
От: xy012111  
Дата: 05.10.15 14:30
Оценка: 3 (1)
Здравствуйте, mDmitriy, Вы писали:

D>Есть примерно такой код:

D>class MyParent
D>{
      public virtual bool X {get; set;}
D>}
D>class MyChild : MyParent
D>{
      public override bool X {get; set;}
D>}

D>Надо получить список PropertyInfo класса MyChaild, которые не унаследованы из класса MyParent.
D>Нужен общий алгоритм.

Для MyChild нужно ли вернуть X?
Re: Как правильно сравнивать Property Info?
От: koodeer  
Дата: 05.10.15 15:00
Оценка: 3 (1)
Здравствуйте, mDmitriy, Вы писали:

D>
class MyParent
{
    bool A {get; set;}
    bool B {get; set;}
    bool C {get; set;}
}
class MyChild : MyParent
{
    bool C {get; set;}
}

D>Надо получить список PropertyInfo класса MyChaild, которые не унаследованы из класса MyParent.

Это действительно приватные свойства?

var flags = BindingFlags.NonPublic | BindingFlags.Instance;

// вариант 1
typeof(MyChild).GetProperties(flags);

// вариант 2
var child = new MyChild();
child.GetType().GetProperties(flags);
Re[2]: Как правильно сравнивать Property Info?
От: mDmitriy Россия  
Дата: 05.10.15 19:21
Оценка:
Здравствуйте, xy012111, Вы писали:
X>
class MyParent
{
   public virtual bool X {get; set;}
}
class MyChild : MyParent
{
   public override bool X {get; set;}
}

X>Для MyChild нужно ли вернуть X?
Желательно иметь такой механизм тоже, но не принципиально...
В общем случае, все объекты, для которых это нужно, унаследованы от базового класса ради его базовой функциональности без оверрайдинга, так что интересуют только их оригинальные свойства.
Re[2]: Как правильно сравнивать Property Info?
От: mDmitriy Россия  
Дата: 05.10.15 19:31
Оценка:
Здравствуйте, koodeer, Вы писали:
K>Это действительно приватные свойства?
Вообще-то public, просто забыл дописать
K>
var flags = BindingFlags.NonPublic | BindingFlags.Instance;
// вариант 1
typeof(MyChild).GetProperties(flags);
// вариант 2
var child = new MyChild();
child.GetType().GetProperties(flags);

Но идея понятна, спасибо!
Re: Всем спасибо!
От: mDmitriy Россия  
Дата: 06.10.15 08:14
Оценка:
type.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public)

спасло...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.