Я делаю проект, в котором мне нужно зарегистрировать все свойства, так как система настолько велика, что потребуется много работы, чтобы зарегистрировать все свойства, которые я хочу быть зависимыми для целей Xaml.
Цель состоит в том, чтобы найти все свойства, которые находятся в верхней части дерева.
, поэтому в основном
public class A{
public int Property1 { get; set; }
}
public class B : A{
public int Property2 { get; set; }
public virtual int Property3 { get; set; }
}
public class C : B{
public override int Property3 { get; set; }
public int Property4 { get; set; }
public int Property5 { get; set; }
}
Конечный результат будет выглядеть примерно так
A.Property1
B.Property2
B.Property3
C.Property4
C.Property5
Если вы заметили, что я не хочу принимать переопределенные свойства из-за того, как я ищу свойства, если я делаю что-то вроде
C.Property3, например, и не может найти его, он будетпроверьте базовый тип C и там он найдет его.
Это то, что у меня есть до сих пор.
public static void RegisterType( Type type )
{
PropertyInfo[] properties = type.GetProperties( BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.GetProperty | BindingFlags.SetProperty );
if ( properties != null && properties.Length > 0 )
{
foreach ( PropertyInfo property in properties )
{
// if the property is an indexers then we ignore them
if ( property.Name == "Item" && property.GetIndexParameters().Length > 0 )
continue;
// We don't want Arrays or Generic Property Types
if ( (property.PropertyType.IsArray || property.PropertyType.IsGenericType) )
continue;
// Register Property
}
}
}
Мне нужно следующее:
- Publicсвойства, которые не переопределены, не статические, не частные
- Любые свойства get и set разрешены
- Они не массив или универсальный тип
- Это вершина дерева, т. Е. Класс C в этом примере самый высокий (пример списка свойств - именно то, что я ищу)
- Они , а не свойство индексатора (этот [индекс])