【发布时间】:2014-02-16 16:33:47
【问题描述】:
我想知道 C# 是否有等效于 Java 的 <X super MySubClass> 泛型约束。
要指定上限,可以使用class Foo<T> where T : MySuperClass { ... },但我们如何指定泛型参数的下限?
有一些方法可以获得类似的结果,但我还没有找到完美的方法:
-
使用第二个通用参数——但调用者可以指定实际下限的子类。
public class Foo<T, TLowerBound> where TLowerBound : MySubClass where TLowerBound : T { ... } -
这有时用于扩展方法,因此扩展方法的参数
U被限制为类参数T的超类。public static class Extensions { public static void Method<T, U>(this Foo<T> self, U someU) where T : U { self.ValueOfTypeT = someU; } } 在接口上使用变量,但我不确定这是否可用于指定泛型参数的下限。
【问题讨论】:
-
不,基本上 C# 没有任何等价物。
-
@ChrisShain 啊,是的,我前段时间读过这个问题及其答案,最终忘记了它们的存在——谷歌搜索了两个小时后没有找到它们:(。
标签: c# java generics lower-bound