如何使用反射仅获取基类中的属性,而不是继承类。
假设我的基类有一个虚方法,而继承类将覆盖它。如果覆盖调用 base.MyMethod() 则 base.MyMethod() 中的反射从两个类或仅继承类中获取属性,具体取决于使用的 BindingFlags。
有没有办法只能访问基类中的属性?
编辑:也许一些代码将有助于解释我为什么要这样做。
internal static void Save(DataTransactionAccess data, string sproc, object obj)
{
if (checkMandatoryProperties(obj))
{
saveToDatabase(data, sproc, obj);
}
}
private static void saveToDatabase(DataTransactionAccess data, string sproc, object obj)
{
List<object> paramList;
PropertyInfo idProperty;
populateSaveParams(out paramList, out idProperty, obj);
if (idProperty != null)
{
int id = data.ExecuteINTProcedure(sproc, paramList.ToArray());
idProperty.SetValue(obj, id, null);
}
else
{
data.ExecuteProcedure(sproc, paramList.ToArray());
}
}
private static void populateSaveParams(out List<object> paramList, out PropertyInfo idProperty, object obj)
{
paramList = new List<object>();
idProperty = null;
foreach (PropertyInfo info in obj.GetType().GetProperties())
{
if (info.GetCustomAttributes(typeof(SaveProperty), true).Length > 0)
{
paramList.Add("@" + info.Name);
paramList.Add(info.GetValue(obj, null));
}
if (info.GetCustomAttributes(typeof(SaveReturnIDProperty), true).Length > 0)
{
idProperty = info;
}
}
}
在 populateSaveParams 的 foreach 循环中,我需要获取调用 Save 的 obj 中的类的属性,而不是它继承自的任何类或其任何子类。
希望这能让它更清楚。