Tôi đã kịch bản sau đâyNET Get sở hữu tư nhân thông qua Reflection
assebly Một
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;
}
}
}
hội 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; }
}
}
Trong MyBaseEntity lớp tôi cố gắng để có được những con ISET tin và gọi phương thức "Thêm". tôi gọi là phương pháp "addChild" như
myObject.addChild<MyModelChild>(child);
nhưng phương pháp GetProperties
không trích xuất các tài sản cá nhân. Nó có thể trích xuất tất cả các tài sản công cộng nhưng không phải là riêng tư.
Bất cứ ai cũng có thể giúp tôi?
Cảm ơn bạn!
Tôi nghĩ bạn có lỗi đánh máy trong mã Assembly A (bạn không làm gì với pInfo). Tôi cũng tự hỏi những gì làm cho điểm AddChild ảo là nếu bạn đang đi để làm phản ánh bên trong của nó thay vì chỉ ghi đè nó trong kế thừa các lớp học. –
@Malcom O'Hare bạn nói đúng! Tôi đã nhận xét các phương pháp là "chưa hoàn thành" và loại bỏ ảo – Faber