簡體   English   中英

從實例化器類中獲取屬性

[英]Getting a property from the instantiator class

不是一個有經驗的程序員,所以可能不是一個很難的問題。

在 WPF 中在 VB.net 中開發一個小應用程序。 我做了 3 個類, EngineeringObject<==Inherits==PartOfInstallation<==Inherits==SensorActor

在 SensorActor 類中,我嘗試使用 MyBase.Name 函數獲取 PartOfInstallation 的屬性。 但這直接適用於 EngineeringObject。 我該如何解決這個問題?

Public Class EngineeringObject
''Private declarations, alleen objecten die erven kunnen hieraan, of dmv van getters en setters
'Name of part
Private sName As String = "Naam"

'81346 Id's
Private sSystemId As String = "Functie" 'VentilationSystem, Pumpsystem
Private sLocationId As String = "Locatie" 'Room 0.0
Private sObjectId As String = "Object" 'Fan, Pump

'General
Private sPartNumber As String
Private sLinkToDatasheet As String

'Property's
Public Property Name() As String
    Get
        Return sName
    End Get
    Set(ByVal value As String)
        sName = value
    End Set
End Property

Public Property SystemId() As String
    Get
        Return sSystemId
    End Get
    Set(ByVal value As String)
        sSystemId = value
    End Set
End Property

Public Property PartNumber() As String
    Get
        Return sPartNumber
    End Get
    Set(ByVal value As String)
        sPartNumber = value
    End Set
End Property

Public Property LinkToDatasheet() As String
    Get
        Return sLinkToDatasheet
    End Get
    Set(ByVal value As String)
        sLinkToDatasheet = value
    End Set
End Property

Public Sub New()

End Sub

End Class

Public Class PartOfInstallation
Inherits EngineeringObject

'src: https://stackoverflow.com/questions/21308881/parent-creating-child-object
'src: https://stackoverflow.com/questions/16244548/how-to-create-a-list-of-parent-objects-where-each-parent-can-have-a-list-of-chil
Private lSensorActor As New List(Of SensorActor)

Public Function GetSensorActor()
    Return Me.lSensorActor
End Function

Public Sub CreateSensorActor()
    lSensorActor.Add(New SensorActor)
End Sub

End Class

Public Class SensorActor
Inherits PartOfInstallation
Dim sMyPartOfInstallation As String

Public Property MyPartOfInstallation As String
    Get
        Return sMyPartOfInstallation
    End Get
    Set(value As String)
        sMyPartOfInstallation = MyBase.Name

    End Set
End Property

End Class

如果我理解正確的話,根據您的評論,您希望在PartOfInstallation實例中實例化的每個SensorActor都獲得與該實例相同的名稱。

如果是這樣,那么只需將第二個構造函數添加到您的SensorActor類,允許您也為它傳遞一個名稱:

Public Class SensorActor
    Inherits PartOfInstallation

    ...your code...

    Public Sub New() 'Empty constructor, for if/when you don't want to set the name immediately.
    End Sub

    Public Sub New(ByVal Name As String)
        Me.Name = Name
    End Sub
End Class

現在在PartOfInstallation類中,您可以執行以下操作:

Public Sub CreateSensorActor()
    lSensorActor.Add(New SensorActor(Me.Name)) 'Here, "Me" refers to the current PartOfInstallation instance.
End Sub

或者,您可以讓SensorActor構造函數采用PartOfInstallation實例,從而允許您復制您喜歡的任何屬性:

Public Class SensorActor
    Inherits PartOfInstallation

    ...your code...

    Public Sub New()
    End Sub

    Public Sub New(ByVal BasedOnPOI As PartOfInstallation)
        Me.Name = BasedOnPOI.Name
    End Sub
End Class

從而使PartOfInstallation類中的代碼:

Public Sub CreateSensorActor()
    lSensorActor.Add(New SensorActor(Me))
End Sub

閱讀有關構造函數的更多信息: 對象生命周期:如何創建和銷毀對象 (Visual Basic) | 微軟文檔

下面的結果,如果有改進的余地......總是歡迎。

SensorActor

Public Class SensorActor
Inherits PartOfInstallation
Dim sTemp As String



Public Overloads Property SystemId() As String
    Get
        Return Me.sSystemId
    End Get
    Set(ByVal value As String)
        Me.sSystemId = sTemp + "." + value
    End Set
End Property

Public Sub New(ByVal BasedOnPOI As PartOfInstallation)
    sTemp = BasedOnPOI.SystemId
End Sub



End Class

部分安裝

Public Class PartOfInstallation
Inherits EngineeringObject

'src: https://stackoverflow.com/questions/21308881/parent-creating-child-object
'src: https://stackoverflow.com/questions/16244548/how-to-create-a-list-of-parent-objects-where-each-parent-can-have-a-list-of-chil
Private lSensorActor As New List(Of SensorActor)


Public Function GetSensorActor()
    Return Me.lSensorActor
End Function



Public Sub CreateSensorActor()
    lSensorActor.Add(New SensorActor(Me))
End Sub

End Class

工程對象

Public Class EngineeringObject
''Private declarations, alleen objecten die erven kunnen hieraan, of dmv van getters en setters
'Name of part
Private sName As String = "Naam"

'81346 Id's
Friend sSystemId As String = "Functie" 'VentilationSystem, Pumpsystem
Private sLocationId As String = "Locatie" 'Room 0.0
Private sObjectId As String = "Object" 'Fan, Pump

'General
Private sPartNumber As String
Private sLinkToDatasheet As String

'Property's
Public Property Name() As String
    Get
        Return sName
    End Get
    Set(ByVal value As String)
        sName = value
    End Set
End Property

Public Property SystemId() As String
    Get
        Return sSystemId
    End Get
    Set(ByVal value As String)
        sSystemId = "=" + value
    End Set
End Property

Public Property PartNumber() As String
    Get
        Return sPartNumber
    End Get
    Set(ByVal value As String)
        sPartNumber = value
    End Set
End Property

Public Property LinkToDatasheet() As String
    Get
        Return sLinkToDatasheet
    End Get
    Set(ByVal value As String)
        sLinkToDatasheet = value
    End Set
End Property





Public Sub New()

End Sub

End Class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM