Переопределить существующее свойство как дочернюю форму его возвращаемого типа - PullRequest
0 голосов
/ 11 мая 2010

Я прошу прощения, если этот заголовок сбивает с толку. Этот вопрос может быть результатом отсутствия кофе и / или сна, но мой ум сейчас не работает правильно.

В любом случае, у меня есть наследующее дерево (я знаю, что архитектура не идеальна):

BaseClass

GeneralForm : Inherits BaseClass

SpecificForm : Inherits GeneralForm

И такой объект:

MyItem

MySpecificItem : Inherits MyItem

У меня есть Items As List (Of MyItem) как свойство в BaseClass. Я бы хотел, чтобы SpecificForm каким-то образом переопределил Items для возврата типа List (Of MySpecificItem). Я чувствую, что это легко сделать, но опять же у меня кружится голова, и я не могу думать прямо сейчас.

Большое спасибо заранее.

EDIT

Если вышеприведенное невозможно, можно ли взять List (Of MyItem) и превратить его в List (Of MySpecificItem)? MySpecificItem имеет только одно дополнительное свойство, специфичное для SpecificForm, но мне НУЖНО это.

Кто-нибудь? : \

1 Ответ

0 голосов
/ 11 мая 2010

Вы должны быть в состоянии SpecificForm просто сделать следующее ...

Private pMySpecificItems As List(Of MySpecificItem)

Public Shadows ReadOnly Property Items() As List(Of MySpecificItem) 
    Get 
        Return pMySpecificItems
    End Get 
End Property

Ключевое слово 'Shadows' сообщит компилятору, что это свойство в SpecificForm скрывает свойство Items из формы базового класса.

Вы не можете на самом деле делегировать свойству базового класса и «приводить» его к List(Of MySpecificItem), потому что, хотя подкласс может рассматриваться как экземпляр его базового класса, объект базового класса нельзя привести к экземпляр подкласса (поскольку подкласс мог добавить необходимые свойства / состояние, которые базовый класс не поддерживает или не реализует).

...