[英]Extension method with generic parameter called from subclass instance
這是我的問題:
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()
內部的反射返回用戶屬性。
我可以通過重載Mapper<T>.GetProperties(instance.GetType())
使其工作,但這似乎在語義上不正確,因為有兩種類型會導致歧義。
有沒有更好的方法來解決這個問題? 謝謝。
通用類型參數在編譯時解析,而不是在運行時解決,沒有什么可以做的。
您需要通過在對象的實例上使用GetType()
來確定類型以獲取運行時類型,因此您可能需要重新考慮您的設計,並記住這一點。 在這種情況下,使用泛型可能不是最好的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.