我有一个界面
public interface IIdentity<T>
{
T GetUser();
}
我有一个基类,它将接口实现为抽象方法
public abstract class BaseUser<T> : IIdentity<T>
{
public string UserId { get; set; }
public string AuthType { get; set; }
public List<Claim> Claims { get; set; }
public abstract T GetUser();
}
在继承基类
的类中 public class JwtUser : BaseUser
{
public string Sub { get; set; }
}
我使用泛型类型BaseUser需要1个参数时出错,我在这里做什么,基本上我希望我的用户从基类继承共享属性(我认为)并实现来自基类的泛型方法,因为我将拥有不同类型的用户(JWT / Windows等)我需要抽象出getUsers方法,希望这有意义吗?
答案 0 :(得分:3)
您必须实现此方法,两者都需要在BaseUser中设置泛型。
您可以公开该通用:
public class JwtUser<T> : BaseUser<T>
{
public string Sub { get; set; }
}
或者,只需设置通用:
public class JwtUser : BaseUser<JwtUser>
{
public string Sub { get; set; }
}
答案 1 :(得分:1)
对于Ref:Generic Classes (C# Programming Guide)
应该是这样的public class JwtUser<User> : BaseUser<User>
{
public string Sub { get; set; }
}
或
public class JwtUser<T> : BaseUser<T>
{
public string Sub { get; set; }
}
和创建实例时
var jwtUser =new JwtUser<User> ();
或
class JwtUser: BaseUser<JwtUser> { }
最后,您必须指定T template
的值作为其通用名称。
例如,如果您使用List<T>
进行使用,则必须使用正确的类型进行初始化,例如interger
列表List<int> intlist = new List<int>();