【发布时间】:2013-04-25 14:45:29
【问题描述】:
我有一个通用类对封装其他协议的协议进行建模。所有协议都实现了一个特定的接口,但这个泛型类必须只包含其中两个协议中的一个,因为在现实世界中不存在其他组合。
有没有办法指定两个允许的类?
目前我有:
public class ProtocolEncapsulator<TContainedCommand> : IBaseCommand where TContainedCommand : IBaseCommand
但这允许框架的用户创建无意义的组合。
谢谢
【问题讨论】:
-
你能给我一个这些无意义组合的例子吗?我想我没听懂。
-
你能创建一个只有这两种类型实现的单独接口吗?我不相信type constraints 让你“或”约束,你不能重载基于类型约束的方法。
-
@ConradClark:我的意思是 ProtocolEncapsulator 只是封装了 2 种协议,因为这是制造商为他们自己的协议创建的协议(他们只有 2 个)。由于我们支持的所有协议(来自他们和其他人)都实现了 IBaseCommand,因此您可以封装没有意义的东西。
-
@BrianS:我可以,但只为这两个界面创建一个“假”界面感觉不太好,但也许这是唯一的解决方案。
-
如果你想让它成为编译时约束(我理解这个问题),这是我能想到的最好方法。否则,您可以使用反射来检查类型并在它不是这两个选项之一时引发异常,但这会导致运行时错误,在我看来,这比编译时约束更不可取。
标签: c# .net generics constraints communication