Доступ к свойству базового класса в классе наследования - PullRequest
0 голосов
/ 23 ноября 2018

Я использую базовый класс Button в VB.net (VS2017) для создания нового класса с именем CDeviceButton.Затем CDeviceButton создается в качестве базы для других классов, таких как CMotorButton, CValveButton.

Я хочу установить свойство Tag в дочернем классе CMotorButton, но получить к нему доступ в конструкторе в CDeviceButton.Не работает для меняОн оказывается пустым.

Тег устанавливается в стандартном свойстве при вставке экземпляра CMotorButtom в форму.

Я также пытался убедиться, что конструкторы родительских классов запускаются, установив mybase.New () в качестве первого действия в каждом конструкторе, но это ничего не изменило.

Есть идеи по улучшению?

Public Class CDeviceButton
    Inherits Button
    Public MMIControl As String = "MMIC"

    Public Sub New()
        MMIControl = "MMIC" & Tag
    End Sub
End class

Public Class CMotorButton
    Inherits CDeviceButton

    Sub New()
        'Do Something
    end Sub
End Class

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Ниже мое решение, которое я придумал, который работает.По сути, я проверяю, что вся инициализация прошла перед чтением свойства Tag.Я обнаружил, что свойство Tag пусто до тех пор, пока New () в CMotorButton не завершит работу, хотя свойство Tag было установлено при создании экземпляра CMotorButton в форме.TimerInitate имеет время тика 500 мс.

Не самое профессиональное решение, но работает для того, что мне нужно в данный момент.

Другим вариантом может быть многопоточность, но я не пробовал и оставлю это для будущих испытаний.

Public Class CDeviceButton
    Inherits Button
    Public MMIControl As String = "MMIC"

    Public Sub New()
        TimerInitiate = New Timer(Me)
    End Sub
    Private Sub TimerInitiate_Tick(sender As Object, e As EventArgs) Handles TimerInitiate.Tick
        If Tag <> Nothing Then
            TimerInitiate.Stop()
            MMIControl = "MMIC" & Tag
        End If 
    End Sub
End class

Public Class CMotorButton
    Inherits CDeviceButton

    Sub New()
        'Do Some stuff
        TimerInitiate.Start()
    End Sub
    Private Sub CMotorButton_Click(sender As Object, e As EventArgs) Handles Me.Click
End Class
0 голосов
/ 23 ноября 2018

Когда вы пытаетесь объединить тег со строкой, вы пытаетесь добавить объект, который, вероятно, ничто.Сначала я установил свойство Tag и использовал .ToString, и он, кажется, работает.

Public Class MyButton
        Inherits Button
        Public Property MyCustomTag As String
        Public Sub New()
            'Using an existing Property of Button
            Tag = "My Message"
            'Using a property you have added to the class
            MyCustomTag = "Message from MyCustomTag property : " & Tag.ToString
        End Sub
    End Class

    Public Class MyInheritedButton
        Inherits MyButton
        Public Sub New()
            If CStr(Tag) = "My Message" Then
                Debug.Print("Accessed Tag property from MyInheritedButton")
                Debug.Print(MyCustomTag)
            End If
        End Sub
    End Class

А затем в форме

Private Sub Test()
    Dim aButton As New MyInheritedButton
    MessageBox.Show(aButton.Tag.ToString)
    MessageBox.Show(aButton.MyCustomTag)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...