如何约束一个泛型类,使其仅与两个类一起工作

本文关键字:两个 一起 工作 泛型类 约束 何约束 一个 | 更新日期: 2023-09-27 18:10:57

我有一个通用类对封装其他协议的协议进行建模。所有的协议都实现一个特定的接口,但是这个泛型类必须只包含这些协议中的两个中的一个,因为在现实世界中,其他组合不存在。

是否有办法指定两个允许的类?

目前我有:

public class ProtocolEncapsulator<TContainedCommand> : IBaseCommand where TContainedCommand : IBaseCommand 

但是这允许框架的用户创建无意义的组合。

谢谢

如何约束一个泛型类,使其仅与两个类一起工作

我建议创建一个仅由这两个协议实现的接口,然后使用类型约束来限制所讨论的方法。

类似:

public interface IExclusiveCommand : IBaseCommand
{
    void ExclusiveMethod();  //Not necessary if there are no differences between Base and Exclusive
}
public class ProtocolEncapsulator<TContainedCommand> : IBaseCommand where TContainedCommand : IExclusiveCommand
{
}

虽然它确实增加了另一个接口,可能被视为增加了复杂性,但我相信它实际上通过使它们更明确和清晰而简化了事情。并且编译时限制使其更易于维护和更容易排除故障。