【发布时间】:2012-01-27 02:21:51
【问题描述】:
我想知道为什么我不能像拥有泛型方法那样在非泛型类中拥有泛型属性。即:
public interface TestClass
{
IEnumerable<T> GetAllBy<T>(); //this works
IEnumerable<T> All<T> { get; } //this does not work
}
我读过@Jon Skeet 的answer,但这只是一个声明,很可能在规范中的某个地方。
我的问题是为什么实际上是这样的?这个限制是否避免了一些问题?
【问题讨论】:
-
答案可能是“没有任何意义”。对我而言,属性与状态有关,而方法与行为有关。行为普遍适用而类型无关紧要是有意义的,实际上,同一方法普遍适用于同一实例中具有许多不同类型的许多不同执行,并且状态没有意义普遍适用于同一程度。如果你需要泛型状态,你需要一个泛型类。但我只是在沉思。
-
@AnthonyPegram 在这里。一个事物的属性是参数多态有什么意义呢?事物的属性是它的颜色、高度、重量等。属性的全部点是它们没有参数化。用形式参数对属性进行参数化是没有意义的,而且说“我希望我的 Car 类具有不同于 Weight
的 Weight 属性”当然也没有任何意义。用 type 参数化 property 是什么意思? -
@EricLippert 通用属性看起来确实很方便,例如:
class Figure { public ColorT Color<ColorT> { get { ... } } ... }(可能对ColorT有一些限制)以在所需的颜色空间中返回颜色。或使用不同单位的数量,以参考您的示例。 -
另外,
GetWeight<Giraffe>();也没有意义,但我猜你不会认为泛型方法毫无意义。 -
@BartoszKP 这与那个电话是否有意义无关; Eric 评论中的关键是“属性的全部意义在于它们没有参数化”,
<Giraffe>肯定是一个参数——特别是泛型类型参数。
标签: c# generics properties language-design language-specifications