Wie kann ich auf Klasse zugreifen?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von vico255.

    Wie kann ich auf Klasse zugreifen?

    Das Thema gab es bestimmt schon aber irgendwie hab ich nicht die passende Antwort gefunden.

    Ich habe mal ein Muster vorbereitet.

    VB.NET-Quellcode

    1. Class Sensor
    2. Public Property Preis As Double
    3. Public Property Spannung As Integer
    4. End Class
    5. Class Dämmerung
    6. Inherits Sensor
    7. Public Property Lux As Integer
    8. End Class
    9. Class Temperatur
    10. Inherits Sensor
    11. Public Property Temp As Double
    12. End Class


    Jetzt kommt ein Wert von außen und ich weiß auch welcher Sensor (Index)

    Wie kann ich den Wert zuweisen?

    VB.NET-Quellcode

    1. Dim nSensor As New Dämmerung
    2. With nSensor
    3. .Lux = 800
    4. End With
    5. Dim MeineSensoren As New List(Of Sensor)
    6. MeineSensoren.Add(nSensor)
    7. MeineSensoren(0).Lux ???


    Die Eigenschaft ist nicht vorhanden.

    Lg :)
    In Arbeit...
    Wenn Du weißt, was der Sensor für ein Typ ist, musst Du ihn erst zu der Unterklasse casten und kannst dann erst deren Eigenschaft abrufen. Siehe dazu DirectCast. Deine Oberklasse kennt nämlich kein ​Lux.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.NET-Quellcode

    1. Public Sub ValueReceived(ByVal e As GroupValueEventArgs)
    2. For Each sen In MySensoren
    3. '...
    4. Next
    5. End Sub


    DirectCast(sen, SensorA) funktioniert :thumbsup:

    Kann man das irgendwie in eine Select Case packen? Je nachdem was rein kommt, sind wie Werte anders zu bearbeiten.


    Edit. Erledigt
    In Arbeit...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vico255“ ()

    @vico255 So was:

    VB.NET-Quellcode

    1. If TypeOf sen Is Dämmerung Then
    2. Label1.Text = TryCast(sen, Dämmerung).Lux.ToString()
    3. ElseIf TypeOf sen Is Temperatur Then
    4. Label1.Text = TryCast(sen, Temperatur).Temp.ToString()
    5. End If
    Und es genügt dann ein TryCast()
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Oder sowas? @RodFromGermany

    VB.NET-Quellcode

    1. Public Sub ValueReceived(ByVal e As GroupValueEventArgs)
    2. For Each sen In MySensoren
    3. If e.Address.ToString = sen.Gruppenadresse Then
    4. Select Case sen.GetType
    5. Case GetType(Dämmerung)
    6. Dim G = DirectCast(sen, Dämmerung)
    7. Case GetType(Temp)
    8. Dim G = DirectCast(sen, Temp)
    9. End Select
    10. End If
    11. Next
    12. End Sub
    In Arbeit...
    Was sind

    vico255 schrieb:

    sen.Gruppenadresse
    Temp
    :?:
    Ansonsten Geschmackssache.
    =====
    Wieso ist Gruppenadresse ein String?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()