用另一种泛型类型制作2个抽象类的任何方法?

时间:2019-02-18 20:36:22

标签: c# class generics

我正在为我的Socket TCP服务器创建一个库。

我希望我的BaseServer类将BaseUser作为通用类型,并将BaseUser作为BaseServer作为通用类型(它们是抽象类)。

两个类都需要在类型的where子句中使用其类型。

我如何设法使其正常工作?

BaseServer.cs

public abstract class BaseServer<UserType> where UserType : BaseUser//Need <BaseServerChildrenType>
{
    public List<UserType> Users { get; protected set; }
}

BaseUser.cs

public abstract class BaseUser<ServerType> where ServerType : BaseServer//Need <BaseUserChildrenType>
{
    public ServerType server { get; private set; }
}

1 个答案:

答案 0 :(得分:0)

也许可以帮助您

public interface IBaseUser
{ }

public interface IBaseServer
{ }

public abstract class BaseServer<UserType> where UserType : IBaseUser//Need <BaseServerChildrenType>
{
    public List<UserType> Users { get; protected set; }
}

public abstract class BaseUser<ServerType> where ServerType : IBaseServer//Need <BaseUserChildrenType>
{
    public ServerType server { get; private set; }
}

public class Server1 : BaseServer<User1>, IBaseServer
{ }

public class User1 : BaseUser<Server1>, IBaseUser
{ }

选项2,因此您无需在任何派生类中实现接口:

public interface IBaseUser
{ }

public interface IBaseServer
{ }

public abstract class BaseServer<UserType> :IBaseServer where UserType : IBaseUser
{
    public List<UserType> Users { get; protected set; }
}

public abstract class BaseUser<ServerType> :IBaseUser where ServerType : IBaseServer
{
    public ServerType server { get; private set; }
}

public class Server1 : BaseServer<User1>
{ }

public class User1 : BaseUser<Server1>
{ }