有时有类似的东西很有用:
class X {
...
}
class Y {
X X {
get { ... }
set { ... }
}
}
因为 X 描述了类型是什么(作为类名)和被访问/变异的值(作为属性名)。到现在为止还挺好。假设你想做同样的事情,但是以一种通用的方式:
class Z<T> {
T T {
get { ... }
set { ... }
}
}
对于这个例子,编译器抱怨:The type 'Z<T>' already contains a definition for 'T'
.
属性、变量和方法都会发生这种情况,我不太明白为什么——编译器肯定知道 T 是一种类型,因此可以像第一个示例中那样找出它吗?
简短版本:为什么第一个示例有效,而第二个示例无效?
编辑:我刚刚发现,如果我“重构 > 重命名”类型参数,比如从 T 到 U,IDE 会将其更改为:
class Z<U> {
U T {
get { ... }
set { ... }
}
}
所以里面的东西知道什么是类型,什么是成员名