如何约束一个泛型类,使其仅与两个类一起工作
本文关键字:两个 一起 工作 泛型类 约束 何约束 一个 | 更新日期: 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
{
}
虽然它确实增加了另一个接口,可能被视为增加了复杂性,但我相信它实际上通过使它们更明确和清晰而简化了事情。并且编译时限制使其更易于维护和更容易排除故障。