0

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

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

目前我有:

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

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

谢谢

4

1 回答 1

2

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

就像是:

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
{
}

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

于 2013-04-25T15:07:37.160 回答