2017-12-29 48 views
1

経験豊富なプログラマーではないので、難しい質問ではないでしょう。インスタンシエータークラスからプロパティを取得する

VB.netで小さなアプリケーションをWPFで開発する。 私は3つのクラスを作った、EngineeringObject < ==は== PartOfInstallation < ==私は、関数MyBase.NameでPartOfInstallationのプロパティを取得しようとしているクラスSensorActorで== SensorActor

を継承継承します。しかし、これは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 
+0

のみ' NAME'プロパティは、それがEngineeringObject' 'から継承するものです。返されると期待される他の 'Name'プロパティは何ですか? – Blackwood

+0

私が持っている問題は、PartOfInstallationで記入した値ではなく、 "Naam"がEngineeringObjectの値であるということです。 – NWSS

+0

私はプログラムを実行しているときに、PartOfInstallationクラスの複数のオブジェクトを作成しています。すべての名前が異なると、特定のPartOfInstallationでSensorActorをインスタンス化すると、その名前を取得すると期待します。 – NWSS

答えて

1

私はそれを正しく理解していれば、あなたのコメントをもとに、あなたはPartOfInstallationインスタンス内でインスタンス化し、すべてのSensorActorは、そのインスタンスと同じ名前を取得したいです。

もしそうなら、あなたは同様にそれの名前を渡すことができるようにあなたのSensorActorクラスに2つ目のコンストラクタを追加します。

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インスタンスにして、好きなプロパティをコピーすることができます。

01コンストラクタの詳細を読む

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

:このよう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 

Object Lifetime: How Objects Are Created and Destroyed (Visual Basic) | Microsoft Docs

+0

ありがとう!私は今、私が望む結果を持っています。 PartOfInstallationの名前が "= B"と等しい(データグリッド内に)記入すると、SensorActorの名前を "F5"として記入します。それは名前を "= B.F5"に修正します – NWSS

+0

@NWSS:私は助けてくれることができてうれしくて、Stack Overflowへようこそ!私の答えは、**私の投稿の左側にある**チェック/ **チェックマーク**を押すことで受け付け**としてマークしてください。これは他のユーザーに質問が解決されたことを示します。詳細については、[回答を受け入れる方法は?](https://meta.stackexchange.com/a/5235) –

0

以下の結果改善の余地があるとすれば、...いつも歓迎します。 `PartOfInstallation`が有する

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 
関連する問題