獲取私有財產我有以下情形.NET通過反射
Assebly一個
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;
}
}
}
組件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; }
}
}
在課堂上MyBaseEntity我試圖讓私人ISet的孩子並調用方法「添加」。 我稱之爲「的addChild」方法類似
myObject.addChild<MyModelChild>(child);
但GetProperties
方法不提取的私有財產。它可以提取所有公共財產,但不是私人財產。
任何人都可以幫到我嗎?
謝謝!
我在想你在Assembly A中有一個錯字(你沒有對pInfo做任何事情)。我也想知道讓AddChild虛擬化的意義在於,如果您要在其中進行反射而不是在繼承類中重寫它, – 2011-12-19 18:23:52
@Malcom O'Hare你是對的!我已經評論該方法爲「未完成」,並刪除了虛擬 – Faber 2011-12-19 22:53:42