使用泛型类型BaseUser时出错需要1个参数

时间:2018-03-18 18:27:21

标签: c# generics interface abstract-class

我有一个界面

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方法,希望这有意义吗?

2 个答案:

答案 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>();

相关问题