我有一个通用类对封装其他协议的协议进行建模。所有的协议都实现了一个特定的接口,但是这个泛型类必须只包含其中两个协议中的一个,因为在现实世界中其他组合不存在。
有没有办法指定两个允许的类?
目前我有:
public class ProtocolEncapsulator<TContainedCommand> : IBaseCommand where TContainedCommand : IBaseCommand
但这允许框架的用户创建无意义的组合。
谢谢
我有一个通用类对封装其他协议的协议进行建模。所有的协议都实现了一个特定的接口,但是这个泛型类必须只包含其中两个协议中的一个,因为在现实世界中其他组合不存在。
有没有办法指定两个允许的类?
目前我有:
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
{
}
虽然它确实添加了另一个界面并且可能被视为增加了复杂性,但我相信它实际上通过使它们更加明确和清晰来简化事情。并且编译时限制使它更易于维护和更容易排除故障。