リフレクションを使用して、継承されたクラスではなく基本クラスのプロパティのみを取得するにはどうすればよいですか。
基本クラスに仮想メソッドがあり、継承クラスがそれをオーバーライドするとします。オーバーライドが 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 内のクラスのプロパティを取得する必要があります。継承元のクラスやその子クラスのプロパティは取得しません。
これがより明確になることを願っています。