Sun*_*nov 27 c# language-design language-specifications
我想知道为什么我不能在非泛型类中拥有泛型属性,就像我可以使用泛型方法一样.即:
public interface TestClass
{
IEnumerable<T> GetAllBy<T>(); //this works
IEnumerable<T> All<T> { get; } //this does not work
}
Run Code Online (Sandbox Code Playgroud)
我读了@Jon Skeet的回答,但这只是一个声明,很可能是规范中的某个地方.
我的问题是为什么它实际上是这样的?这种限制是否避免了一些问题?
Tim*_*mwi 14
从技术上讲,CLR只支持泛型类型和方法,而不支持属性,因此问题是它没有添加到CLR中.对此的答案可能只是"它不被视为带来足够的好处,值得花费".
但更重要的是,它被认为没有带来任何好处,因为在一个类型的参数化属性上,在语义上没有意义.一个Car
类可能有一个Weight
属性,但拥有一个属性是没有意义Weight<Fruit>
的Weight<Giraffe>
.
Jam*_*See 11
这篇来自Julian Bucknall的Generic Properties博客文章是一个非常好的解释.基本上这是一个堆分配问题.