如何使用反射來僅獲取基類中的屬性,而不是繼承的類。只使用反射獲得基類屬性,而不是繼承類
說我的基類有一個虛擬方法,並且繼承類覆蓋它。如果覆蓋調用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;
}
}
}
這是我需要獲得OBJ內的類保存了調用,而不是從繼承或任何其子類的任何類的屬性populateSaveParams foreach循環中。
希望這可以讓它更清晰。
你在使用'GetType'或'typeof(BaseClass)'檢查它的值時?我認爲後者只會得到你的基類值。 – Tejs 2012-04-24 18:07:15
我不能使用typeof(BaseClass),因爲這是針對接口的擴展方法,所以需要在運行時使用GetType()來確定基礎類。 – GlenW 2012-04-24 18:16:27
爲什麼你的擴展方法關心基類,然後如果它只知道接口?聽起來你的擴展方法太寬泛了。 – Tejs 2012-04-24 18:17:38