Methode auf verschiedene Objekte zuzugreifen

  • Allgemein

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Methode auf verschiedene Objekte zuzugreifen

    Hey,

    gibt es die Möglichkeit mit einer Methode auf verschiedene Objekte zuzugreifen

    VB.NET-Quellcode

    1. Dim test1 As New Name("Peter", 1)
    2. Dim test2 As New Name("Flop", 2)
    3. .....
    4. public sub Namensänderung (t as integer)
    5. test(t) = " Name 3 "
    6. End Sub


    Ich möchte in der Methode angeben können um welches Objekt ich veränderen möchte :) Geht dies nur mit einem Array? Sowas müsste es doch geben ^^

    Lieben Gruß
    geht nur über arrays - ist außerdem besser wenn du viele testx-variablen hast...

    alternativ würde es doch gehen:
    du erstellst eine list(of name) und fügst alle testx-variablen hinzu - genauer gesagt nur die referenz. dann kannst du die liste durhclaufen und hast zusätzlich die einzelnen variablen
    Hey,

    erstmal danke :)

    VB.NET-Quellcode

    1. Dim t1 As New Name("Peter", 1)
    2. Dim t2 As New Name("Flop", 2)
    3. .....
    4. dim test as new arrayliste
    5. test.add(t1)
    6. test.add(t2)
    7. public sub Namensänderung (zahl as integer)
    8. test(t(zahl)) = " Name 3 "
    9. End Sub


    Wie stelle ich es denn das ich das so umsetzte? Kann ich Array-Werte auch einzeln auslesen? Habe seit eben alles versucht irgendwie bekomme ich nur Fehler :(

    Lieben Gruß

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

    Also mein guter...
    Kriegst du eigentlich keine Fehlermeldungen wenn du das da bei dir hinschreibst?

    fangen wir mal an.. Du wolltest eine Liste mit Namen(strings), richtig?

    VB.NET-Quellcode

    1. Dim lstDeineListe As New List(Of String)

    DU willst Namen zu deiner Liste hinzufügen

    VB.NET-Quellcode

    1. lstDeineListe.Add(strNeuerName)

    Du willst einen Namen gegen einen anderen austauschen

    VB.NET-Quellcode

    1. lstDeineListe.Item(lstDeineListe.IndexOf(strAlterName)) = strNeuerName


    Schau dir einfach im MSDN an die List(Of) kann man noch viek mehr mit machen
    Also mein guter ;)

    Doch selbstverständlich wenn ich das so darstelle jedoch war dies auch nur schnell von mir gepostet damit Ihr eine Idee bekommt was ich überhaupt will.

    Objekte in den array einfügen kann ich und ist auch keimn Problem jedoch das weiterberarbeiten stellt sich für mich als schwer herraus.

    Gehen wir davon aus, ich habe Mitarbeiter Objekte oder sonst etwas.

    VB.NET-Quellcode

    1. Dim t1 As New Mitarbeiter( 1, " Peter", 1000)
    2. Dim t2 As New Mitarbeiter( 2, " Peter" , 1000
    3. )Dim t3 As New Mitarbeiter( 3, " Peter" , 1000)
    4. ...
    5. Dim t1000 as New Mitarbeiter(1000, " Peter", 1000")
    6. 'Jetzt erstelle ich den Mitarbeiter
    7. dim mitarbeiter as new arrayliste
    8. mitarbeiter.add(t1)
    9. ....
    10. mitarbeiter.add(1000)
    11. '----------------------
    12. 'Methoden_Test---------
    13. '----------------------
    14. 'Jetzt will ich zum Bsp. via einer Methode von einem gewissen Mitarbeiter anhand der Personalnummer oder Objekt nummer die ja Eindeutig ist
    15. Name, Gehalt verändern.
    16. 'Und hier das Problem
    17. Public sub VerGehalt ( Geld as integer, PersNr as integer) ' (1500€, PersNr=4)
    18. 'WIe kann ich jetzt klarstellen um welchen MItarbeiter es geht?
    19. mitarbeiter.t(PersNr).Gehalt+Geld
    20. 'Wenn das so klappen würde, wäre es ja zu einfach ;)
    21. End sub
    22. Liebe Grüße :)


    Ps: Habe den COde nicht kontrolliert bin auf der Arbeit und habe es schnell versucht, damit ihr mein Problem versteht

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

    Also Du brauchst kein Array... ein einfache List(of) reicht, die musst du in der Größe nicht überwachen, (die Tage erst gelernt; danke an @RodFromGermany)
    Und wenn du für jeden Mitarbeiter mehrere Infos speichern willst musst du dafür erst ne eigene Klasse erstellen.
    Un dann kannst du die alle so ansprechen wie Du das vorhast.
    http://www.vb-paradise.de/programmieren/grundlagen/73771-checkedlistbox-index-einen-wert-zuweisen/
    schau ma in den link, da findest du schön was über Klassen, was dir helfen sollte da eine KLasse für deine Mitarbeiter zu entwickeln
    warum machst du nicht einfach ein zweidimensionales Array, in dem du es so machst:

    Dim Mitarbeiter (,) As String = {{"Peter", "1500"}, {"Günther", "2000"}....... }

    Und jetzt kannst du per Mitarbeiter(578) oder so genau deinen 579. Mitarbeiter ansprechen, auslesen und daten verändern!

    wenn allerdings so viele Mitarbeiter hast, empfiehlt es sich diese nicht wie oben zu initialisieren, sondern das Array aus einer Datenbank oder Textdatei zu füllem!
    so hast du alle deine mitarbeiter auf einem haufen und hast eben auch nicht diese vielen Variablen die jede einen eigenen speicher beanspruchen!

    Edit: @florian ist ein Array nicht viel günstiger ? man hat eben nicht diese vielen Variablen, die speicher fressen, und wegen Größe beachten, jedes Array ist doch dynamisch und kann jederzeit eine neue größe bekommen!
    Hmm, ich persönlich würde allerdings das erstellen einer Klasse bevorzugen. Kann man da doch flexibler erweitern, Zahlen auch als richtige Zahlen speichern, Eintrittsdatum als Datum,.... Könnte man natürlich mit dem Array kombinieren, statt mit der List(of).
    Für ganz einfach eignet sich sicher auch ein zweidimensionaler StringArray.
    ja du hast recht ich würde wahrscheinlich auch ein klasse schreiben, da man dort auch gleich manche funktion hinzufügen kann usw. aber wie es der TE beschreibt dürfte das reichen! und ich verstehe nicht was eine listof bringen soll!

    FloFuchs schrieb:

    Also Du brauchst kein Array... ein einfache List(of) reicht, die musst du in der Größe nicht überwachen, (die Tage erst gelernt; danke an @RodFromGermany)
    Und wenn du für jeden Mitarbeiter mehrere Infos speichern willst musst du dafür erst ne eigene Klasse erstellen.

    Hey,

    was meinst du mit Klasse?? Die Objekte werden doch durch den KOnstrukter der Mitarbeiter-Klasse erzeugt? Also in der KLasse sind alle Eigenschaften von dem Mitarbeiter.
    Dim t1 As New Mitarbeiter( 1, " Peter", 1000) <- Mitarbeiter ist doch die Klasse oder nicht? Bin gerade etwas verwirrt ^^

    Also müsste doch alles vorhanden sein,..:)

    So würde ich die Liste ja erstellen

    VB.NET-Quellcode

    1. Test As New List(of Mitarbeiter) <- Objekt?
    2. test.add(t1)??


    Wäre sehr nett wenn du mir eine Hilfestellung geben könntest. Aber Erstmal vielen Dank für den Link :) Den werde ich mal studieren :)




    @ Vitox
    Habe hier nur ein Beispiel geben, ich möchte ein Objekt bearbeiten was 6 Eigenschaften hat -.-
    damit Ihr eine Idee bekommt was ich überhaupt will.
    das solln Witz sein, odr?

    Alles wassich bisher verstanden habe, ist, dass du Daten verändern willst.

    Aber gugge Phonebook - es kann sehr einfach sein :)

    Nein
    soll es nicht, ich bin komplett neu in der Programmierung, und weiß
    nicht ob ich mich richtig ausdrücke und ob es verständlich.
    Ersetze das "Will" durch "möchte" sollte nicht so klingen!!! Sry

    Ja ich will Daten verändern, ich will aber flexibel auf einzelne Daten zugreifen :)

    ____________________________________________________________________________

    dann mach einfach 6 Eigenschaften draus!!! aber wie gesagt dann ist es
    tatsächlich deutlich besser eine klasse zu schreiben, dieser kannst du
    dann auch gleich properties und funktionen zuweisen!
    Eine Klasse mit Methoden habe ich ja schon erstellt :)

    Ich habe eine Klasse Spieler und eine KLasse Land
    Um beide möglichst sinnvoll bearbeiten zu können habe ich eien Koppelklasse erstellt
    In der Koppelklasse wird das Land und der Spieler erzeugt:)

    In der Koppelklasse soll dann die Liste erstellt werden,...und befüllt und verändert werden,... :pinch:

    In der KLasse Land sind folgende Methoden
    Einheiten, Besitzer usw mit diesen möchte ich dann die Liste verändern

    Ich verstehe irgendwie nicht, wie ich noch eine zusätzliche Klasse erzeugen soll -.-
    Eigentlich habe ich doch schon eine Klasse für beide Objekte.

    Lieben Gruß

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „allgrinder“ ()

    FloFuchs schrieb:

    allgrinder schrieb:

    Dim t1 As New Mitarbeiter( 1, " Peter", 1000) <- Mitarbeiter ist doch die Klasse oder nicht? Bin gerade etwas verwirrt

    Nunja wenn Du i-wo die Klasse Mitarbeiter geschrieben hast, dann ja...
    Schau Dir das Beispiel von ErfinderDesRads an, das hilft.
    So ganz werde ich noch nicht schlau... ?(

    Hey,

    also ich habe 2 Klasse (Spieler & Land) beide haben eigende Methoden.
    Ich habe mir dann eine Koppelklasse erstellt um mit beiden Objekten Optimal arbeiten zu können
    In der Koppelklasse werden dann 2 SPieler und 16 Länder erzeugt.

    Zurzeit sieht zb eine Methode von mir so aus

    VB.NET-Quellcode

    1. Public Sub angreifen(ByVal AngreiferLand As Integer, ByVal VerteidigerLand As Integer)
    2. WuerfelForm.ShowDialog()
    3. 'Dem Angreifer werden Einheiten abgezogen
    4. If l1.LandID = AngreiferLand Then
    5. l1.Landeinheiten -= WuerfelForm.vg
    6. End If
    7. If l2.LandID = AngreiferLand Then
    8. l2.Landeinheiten -= WuerfelForm.vg
    9. End If
    10. If l3.LandID = AngreiferLand Then
    11. l3.Landeinheiten -= WuerfelForm.vg
    12. End If
    13. If l4.LandID = AngreiferLand Then
    14. ....
    15. End If
    16. If l16.LandID = AngreiferLand Then
    17. 'Dem Verteidiger werden einheiten abgezogen
    18. If l1.LandID = VerteidigerLand Then
    19. l1.Landeinheiten -= WuerfelForm.ag
    20. End If
    21. If l2.LandID = VerteidigerLand Then
    22. l2.Landeinheiten -= WuerfelForm.ag
    23. End If
    24. If l3.LandID = VerteidigerLand Then
    25. l3.Landeinheiten -= WuerfelForm.ag
    26. End If
    27. If l4.LandID = VerteidigerLand Then
    28. l4.Landeinheiten -= WuerfelForm.ag
    29. .....
    30. If l16.LandID = VerteidigerLand Then
    31. l16.Landeinheiten -= WuerfelForm.ag
    32. 'Wechselt der Besitzer?
    33. If l1.Landeinheiten <= 0 Then
    34. l1.Landeinheiten = 0
    35. Spielbrett.LandBtn1.Enabled = True
    36. If sp1.AktiverSpieler = 1 Then
    37. l1.Besitzer = 1
    38. sp1.LaenderAnzahl -= 1
    39. sp2.LaenderAnzahl += 1
    40. Else
    41. l1.Besitzer = 2
    42. sp2.LaenderAnzahl -= 1
    43. sp1.LaenderAnzahl += 1
    44. End If
    45. End If
    46. ...
    47. Bis 16


    So sehen alle meine Methoden aus,..eigentlich ist mein Projekt fertig so habe es komplett fertig gestellt und es klappt auch alles wunderbar :)
    Jedoch ist es einfach DIRTY ,...das meiste der Arbeit war, das kopieren der einzelen Methoden und das Anpassen.

    So bin ich halt auf die Idee gekommen,..das würde mir einiges an Arbeit ersparen :)

    Lieben Gruß

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

    also generell würde ich jetzt schon mal statt der ganzen if..then
    for..each Schleifen einbauen... so mal auf die schnelle von hier gesehen... ;) aber was wie noch alles und generell da vielleicht ganz viel einfacher geht ...
    btw... i-wie kam mir das auch glatt bekannt vor.. mit Spielern und Ländern.. da gabs glaub auch nen schönen Ansatz von Picoflop und einen anderen von EDR..
    waren die Vorschläge nix für dich?