从实例化器类中获取属性

时间:2017-12-29 16:23:46

标签: vb.net class inheritance

不是一位经验丰富的程序员,所以可能不是一个难题。

在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

2 个答案:

答案 0 :(得分:1)

如果我理解正确,根据您的评论,您希望在SensorActor实例中实例化的每个PartOfInstallation获得与该实例相同的名称。

如果是这样,那么只需在你的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

详细了解构造函数: Object Lifetime: How Objects Are Created and Destroyed (Visual Basic) | Microsoft Docs

答案 1 :(得分:0)

下面的结果,如果有改进的余地......总是欢迎。

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

PartOfInstallation

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

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
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