C# 中泛型类的一个优点是可以对类型施加约束,因此只有满足多个约束的类型才会被接受。例如:
public class Foo<T> where T : Bar, IBaz, IFoobar {
public Foo (T value) {
//initialize
}
}
这意味着T
只能与从三个描述的类派生的类型统一。
使用方法时,也可以使方法通用。但是我想知道为什么不能在构造函数中指定这样的约束。例如:
public class Foo {
public Foo (Bar & IBaz & IFoobar value) {
//initialize (the "&" syntax is just an example)
}
}
可以将类设为泛型,但如果只有构造函数会使用value
该类的方法,而其他方法不依赖于,这可能会相当麻烦T
。有些问题甚至可能很难用泛型类解决,例如需要编写一个比较器来SomeComparer<T,Q> : IComparer<Foo<T>,Foo<Q>>
引入大量泛型类,而这些泛型类实际上根本不是泛型的。
我不明白为什么没有实现这一点,因为类型系统可以轻松检查参数是否满足所有类型约束。
在 C# 语言规范中不定义合取类型的论点是什么?