Чтобы объявить свойство, компилятору необходимо знать во время компиляции, каким будет тип. (Это то, что могут делать методы, а свойства - нет).
Рассмотрим случай, когда вы связывали данные IEnumerable(Of yourtype)
с DataGridView
, который перечислит все свойства и создаст столбец для каждого из них. Когда он достигает гипотетического универсального свойства, у него нет информации, какой тип заменить.
Рассмотрим случай, когда у вас есть экземпляр вашего класса, и вы задали свойство E
- можно было бы установить два свойства с двумя разными сигнатурами, возможно, одно из них:
foo.E(Of Entity(Of Byte)) = New Entity(Of Byte)
А еще как:
foo.E(Of Entity(Of Guid)) = New Entity(Of Guid)
Итак, должны устанавливать разные свойства? Должна ли установка одной подписи устанавливать значение для другой? Очевидно, что в приведенном выше случае типы не могут быть преобразованы друг в друга.
Вам ничто не мешает:
Public MustInherit Class Entity(Of T As Entity(Of T))
Public Property E() As Entity(Of T)
Get
Throw New NotImplementedException()
End Get
Set
Throw New NotImplementedException()
End Set
End Property
End Class
И в этом случае вы можете иметь только один и тот же тип для сущности, и его свойство E
должно быть того же типа, что и он сам (если вы не украсите дисперсию )