【发布时间】:2016-03-22 13:50:29
【问题描述】:
提前谢谢你。这是我的代码:
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
}
}
public class AppUserManager : UserManager<ApplicationUser>
{
...
}
public interface IOwinManager
{
UserManager<IdentityUser> UserManager { get; }
}
为什么这不起作用?
public class OwinManager : IOwinManager
{
public UserManager<IdentityUser> UserManager
{
get { return new AppUserManager(); }
}
}
既然ApplicationUser继承自IdentityUser,AppUserManager继承自UserManager,为什么不接受组合泛型?谢谢!
【问题讨论】:
-
UserManager<>是一个类,而不是一个接口吗?仅仅因为“一个ApplicationUser是一个IdentityUser”并不意味着“一个UserManager<ApplicationUser>是一个UserManager<IdentityUser>"。除非类型UserManager<>已在其类型参数中声明为 covariant。在当前版本的 C# 中,只有interface类型和delegate类型可以声明为协变(out类型参数上的修饰符)。class类型和struct类型不能。
标签: c# generics interface covariance contravariance