对不起,如果这是一个骗局,但我似乎无法获得正确的关键字组合来过滤各种类型约束和泛型问题(因为有很多)。
我有两个接口(interface)——我们称它们为IOnline 和IOffline。
它们密切相关,因为它们描述了几乎相同的契约,但它们之间的主要区别之一是使用具体实现的上下文。这不完全是我的情况,但它很好地说明了问题。
然后我有一些方法可以针对这些接口(interface)的具体实现者工作。有时这些方法只想处理一种类型而不是另一种。
足够简单:
public void DoStuff<T>(string foo) where T : IOnline {}
踢球者正在实现可以对任一类型进行操作的方法的代码。我认为这是正确的,但在阅读编译错误时,我期望约束将被解释为“如果它们实现 IOnline OR IOffline,则允许在这里一般使用任何类型 T”,实际上被解释为“允许任何类型如果它们都实现了,则在这里一般使用 T”。
public void DoStuff<T>(string foo) where T : IOnline, IOffline {}
尝试实现两个具有相同名称但不同约束的单独方法失败,因为存在明显的歧义问题——我们没有重载,因为参数列表是相同的(因为所需的行为是相同的)。
我可以为两种不同的方法使用两个不同的名称,每个方法都有适当的约束,但这看起来很笨拙,并且让下游的其他事情变得很痛苦......可行,但不是理想。
我觉得这里一定有我遗漏的东西......我在通用土地上感觉非常舒服,但这是我第一次必须完成我所追求的事情,我觉得我只是旋转我的轮子 atm。
最佳答案
在您的第二个示例中提供多个约束确实是累加的。 MSDN page on generic constraints对此有一些了解。
你能否让你的两个接口(interface)继承自一个基接口(interface),并将方法限制为基类型?
关于c# - 非严格的多接口(interface)类型参数约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1891656/