.NET Privateigentum per Reflection
Habe ich das folgende Szenario
Assebly Eine
public abstract class MyBaseEntity
{
//Uncompleted method
public void addChild<T>(T child)
{
try
{
Type tInfo = this.GetType();
PropertyInfo pInfo = tInfo.GetProperties(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance).Where(p => p.PropertyType == typeof(ISet<T>)).FirstOrDefault();
MethodInfo mInfo = tInfo.GetMethod("Add");
mInfo.Invoke(this, new object[] {child});
}
catch (Exception ex)
{
throw ex;
}
}
}
Montage B
public class MyModel : MyBaseEntity
{
public virtual int p1 { get; set; }
public virtual int p2 { get; set; }
public virtual DateTime p3 { get; set; }
public virtual bool p4 { get; set; }
private readonly ISet<MyModelChild> _p5;
private readonly ISet<MyModelChild2> _p6;
public virtual string p7 { get; set; }
public MyModel()
{
this._p5 = new HashSet<MyModelChild>();
this._p6 = new HashSet<MyModelChild2>();
}
public virtual IEnumerable<MyModelChild> P5
{
get { return _p5; }
}
public virtual IEnumerable<MyModelChild2> P6
{
get { return _p6; }
}
}
In der Klasse MyBaseEntity ich versuchen, den privaten ISet Kind und rufen Sie die Methode "Hinzufügen".
Ich nenne das "addChild" - Methode wie
myObject.addChild<MyModelChild>(child);
aber die GetProperties
Methode nicht extrahieren des privaten Eigentums. Es kann extrahiert alle öffentlichen Eigenschaften, aber nicht die privaten.
Jemand kann mir helfen?
Danke!
- Ich denke, Sie haben einen Tippfehler in Ihrer Assembly Einen code ein(Sie sind nicht etwas zu tun mit pInfo). Ich bin auch gefragt, was der Punkt AddChild virtuelle ist, wenn Sie gehen zu tun, Reflexion drin statt nur überschreiben es in erbenden Klassen.
- O ' Hare, du hast Recht! Ich' ve kommentiert, die Methode als "nicht erledigt" und entfernt virtuellen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die beiden Soldaten, die Sie finden, sind Felder, Eigenschaften, natürlich, werden Sie nicht finden Sie mit
GetProperties
(Sie könnenGetFields
für die).