这是我的问题:
public class User
{
public virtual void Save()
{
Connection.Save(this);
}
}
public class Administrator : User
{
}
public static class Queries
{
public static void Save<T>(this IDbConnection cn, T entity)
{
var properties = Mapper<T>.GetProperties();
// other code
}
}
public static class Mapper<T>
{
public static IList<Property> GetProperties()
{
var type = typeof(T);
// other code
}
// other T-dependent methods
}
调用user.Save()
时效果很好,但对于admin.Save()
,通用参数T
为User
,而不是Administrator
,因此GetProperties()
内的反射1}}返回用户属性。
我可以通过重载Mapper<T>.GetProperties(instance.GetType())
使其工作,但这似乎在语义上不正确,因为有两种类型会导致歧义。
有没有更好的方法来解决这个问题?感谢。
答案 0 :(得分:3)
通用类型参数在编译时解析,而不是在运行时解决,没有什么可以做的
您需要在对象实例上使用GetType()
来确定类型以获取运行时类型,因此您可能需要重新考虑您的设计,并记住这一点。在这种情况下,使用泛型可能不是最好的事情。