Проблема с наследованием пользовательского контроля - PullRequest
0 голосов
/ 21 июля 2009

В нашей библиотеке есть пользовательский элемент управления, который мне нужно унаследовать и внести в него некоторые изменения У меня сейчас проблема в том, что я не могу напрямую создать новый пользовательский элемент управления. Мне нужно вызвать метод в библиотеке, который создаст и передаст экземпляр пользовательского элемента управления. Пожалуйста, проверьте образец кода ниже.

Я попытался использовать приведение, и я получил InvalidCastException. Я думаю, это потому, что второй требует больше памяти, чем первый.

Заранее спасибо за помощь в этом.

Namespace ProjectA.Components

    Public Class MainClass

        Public Function CreateCustomControl() As CustomControl
            Dim cc As CustomControl = Activator.CreateInstance(Of CustomControl)()
            Return cc
        End Function

    End Class

    Public Class CustomControl
        Inherits System.Windows.Forms.UserControl
    End Class

End Namespace

Namespace ProjectB

    Public Class ExtendedCustomControl
        Inherits ProjectA.Components.CustomControl
    End Class

    Public Class MainForm
        Inherits System.Windows.Forms.Form

        Private Sub CreateInstance()
            Dim i As New ProjectA.Components.MainClass
            Dim myControl As ExtendedCustomControl = i.CreateCustomControl
            ' InvalidCastException is thrown.
        End Sub

    End Class

End Namespace

1 Ответ

0 голосов
/ 21 июля 2009

Это потому, что вы не создаете экземпляр ExtendedCustomControl, вы создаете экземпляр CustomControl. Activator.CreateObject просто создает базовый класс. Вы не можете выкинуть что-то, если это не тот класс, к которому вы обращаетесь.

Может быть, вы хотите, чтобы CreateCustomControl () взял System.Type и затем вместо этого передал его в Activator.CreateInstance? Таким образом, вы могли бы сделать то, что вы хотите?

...