C# 如何实现类的泛型和非泛型版本?

C# 如何实现类的泛型和非泛型版本?,c#,generics,C#,Generics,我想实现泛型类的非泛型版本。像这样 public class ServerSentEvent : ServerSentEvent<NoAdditionalClientInformation> public class ServerSentEvent<ClientInfo> : IServerSentEvent 公共类ServerSentEvent:ServerSentEvent 公共类ServerSentEvent:IServerSentEvent 为了解决这个问题

我想实现泛型类的非泛型版本。像这样

public class ServerSentEvent : ServerSentEvent<NoAdditionalClientInformation>

public class ServerSentEvent<ClientInfo> : IServerSentEvent
公共类ServerSentEvent:ServerSentEvent
公共类ServerSentEvent:IServerSentEvent
为了解决这个问题,我必须创建一个虚拟/空类-无附加ClientInformation


在没有空类的情况下,还有其他方法可以做到这一点吗?

通常情况下,您可以用另一种方法:

public class ServerSentEvent : IServerSentEvent
{}

public class ServerSentEvent<ClientInfo> : ServerSentEvent
{}
公共类ServerSentEvent:IServerSentEvent
{}
公共类ServerSentEvent:ServerSentEvent
{}
这样,泛型版本是非泛型版本的一个更为指定的子类型,允许您在其中放入更多信息,但可以在任何需要非泛型类型的地方使用泛型类型


如果你按照你的建议去做,你需要指定一些默认类型;如果你想不出一个默认的,那可能是错误的顺序,但一般来说,它可能取决于具体情况。

当你说“非泛型”或“泛型”时,你知道它的类型吗?如果是,那么就使用它。如果您查看.NET BCL类,您会注意到泛型版本是非泛型版本的子类,而不是相反。例如,
IEnumerable
实现了
IEnumerable
。如果泛型类继承自非泛型类:
公共类ServerSentEvent:ServerSentEvent
公共类ServerSentEvent:IServerSentEvent
?@Darinditrov您能给出一个泛型类的示例吗非泛型?@lazyberezovsky
ChannelFactory
继承自
ChannelFactory
你能提供一个更详细的例子吗?@Saibot到底是为了什么?也许你应该问你自己的问题?是的,那么它将在10秒钟内被标记为重复:DI希望看到一个案例,在这个案例中,我们可以受益于实现通用和非通用版本。我很难理解为什么这是必要的(或者说是完全必要的?),以及如何正确使用此模式。@Saibot作为示例,请参见
IEnumerable
IEnumerable
IEnumerable
继承自
IEnumerable
,因此每个泛型可枚举项也是非泛型可枚举项。这样做的好处是,任何适用于任何可枚举项的内容也适用于通用可枚举项。另一个例子是
Task
Task