Иногда полезно иметь что-то вроде:
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 является типом, и поэтому может понять его так же, как в первом примере?
Краткая версия: Почему работает первый пример, но не второй?
EDIT: Я только что обнаружил, что если я "Рефакторинг > Переименуйте" параметр типа, скажем, от T до U, среда IDE изменит его на:
class Z<U> {
U T {
get { ... }
set { ... }
}
}
поэтому что-то там знает, какой тип и какое имя участника