.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
InformationsquelleAutor Faber | 2011-12-19
Schreibe einen Kommentar