Wie kann ich Arrays als Klasse erstellen?

  • VB.NET

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

    Wie kann ich Arrays als Klasse erstellen?

    Gibt es eine Möglichkeit eine Klasse für meine Array-Sammlung zu erstellen?

    Meine Arrays sind verschieden und da es sehr viele sind verliert man so dann schnell die Übersicht!

    Meine Arrays:

    VB.NET-Quellcode

    1. Dim KlasseL(0 To 6) As String
    2. Dim KlasseZ(0 To 6) As String
    3. Dim Frak(0 To 2) As String
    4. Dim Magi_Prie_HelmLicht(0 To 1) As String
    5. Dim Heid_Orak_HelmZorn(0 To 1) As String
    6. Frak(0) = "--- Bitte Wählen ---"
    7. Frak(1) = "Allianz des Lichts"
    8. Frak(2) = "Bund des Zorns"
    9. KlasseZ(0) = "Wähle deine Klasse"
    10. KlasseZ(1) = "Heide"
    11. KlasseZ(2) = "Orakel"
    12. KlasseZ(3) = "Krieger"
    13. KlasseZ(4) = "Wächter"
    14. KlasseZ(5) = "Jäger"
    15. KlasseZ(6) = "Assasine"
    16. KlasseL(0) = "Wähle deine Klasse"
    17. KlasseL(1) = "Magier"
    18. KlasseL(2) = "Priester"
    19. KlasseL(3) = "Kämpfer"
    20. KlasseL(4) = "Verteidiger"
    21. KlasseL(5) = "Bogenschütze"
    22. KlasseL(6) = "Waldläufer"
    23. Magi_Prie_HelmLicht(0) = "Bitte Wählen"
    24. Magi_Prie_HelmLicht(1) = "Kupferhelm (LvL: 1)"
    25. Heid_Orak_HelmZorn(0) = "Bitte Wählen"
    26. Heid_Orak_HelmZorn(1) = "Stahlhut (LvL: 1)"


    Mein vorhaben ist eben das ich eine Klasse MeineArrays erstellen möchte die ich dann seperat über beispiel mit: MeineArrays(Frak)

    Aufrufen kann so das mein Code in meiner Form übersichtlicher bleibt :)

    Gibt es da eine Möglichkeit?

    Ein Beispiel wäre eventuell nicht schlecht sofern möglich :)

    MfG

    LuftPost
    Njjaaa, das geht. Allerdings über Umwege. Du müsstest eine Klasse schreiben, auf die du so in etwa zugreifen kannst:

    VB.NET-Quellcode

    1. Instanz.GetArray("ArrayName")(Index) = Wert


    Das liese sich so realisieren:

    VB.NET-Quellcode

    1. Public Class ArrayClass
    2. Dim KlasseL(6) As String
    3. Dim KlasseZ(6) As String
    4. Dim Frak(2) As String
    5. Dim Magi_Prie_HelmLicht(1) As String
    6. Dim Heid_Orak_HelmZorn(1) As String
    7. 'Weil alle Arrays bei 0 beginnen kann das weggelassen werden
    8. 'Dim asdf(4) As String deklariert ein Array mit 5 Einträgen (0 bis 4, also genau das richtige)
    9. Public Function GetArray(ByVal ArrayName As String) As String()
    10. Select Case ArrayName
    11. Case "KlasseL"
    12. Return KlasseL
    13. Case "KlasseZ"
    14. Return "KlasseZ"
    15. End Select
    16. End Function
    17. End Class


    Allerdings: wie man sieht geht das nur, wenn Arrays des selben Typs verwendet werden. Falls jetzt ein Array von Button daher kommt funktioniert das nicht mehr.

    Du kannst Dir eine Wrapperklasse machen, die Dir das Zugreifen auf die Arrays erleichtert, aber ohne einen guten Trick bringt das nicht sehr viel.

    PS: Warum Arrays und nicht List(Of T)?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Naja wenn es sich mit List(Of T) realisieren lässt und dies einfacher geht wäre es nicht schlecht :)

    Arrays war mein erster Versuch aber wenn ich dann verschiedene Arrays habe mit 100 und mehr einträge dann verlier ich irgendwann sicher den Überblick und genau das möchte ich verhindern :)

    Wäre sehr nett wenn du mir dazu noch ein Beispiel geben könntest mit List(Of T) :)

    Mit Arrays kenn ich mich in VB noch net so Perfekt aus LEIDER :(
    Bei MSDN kann man sich sicherlich gut informieren.
    ErfinderDesRades hat auf MyCSharp einige Beispiele genannt, wie man sich informieren kann. Drücke einfach mal in VB F2 und suche nach List. Im ObjectBrowser findest Du alle Member des .Net Framework.

    Aber um's kurz zu machen:
    Dim asdf As New List(Of String) um eine List(Of String) zu deklarieren.
    asdf.Add("Hallo") fügt "Hallo" zur List hinzu.
    asdf(Index) gibt den String an der Position des Index zurück (wie bei Arrays).
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    wenn ich mir die daten so ansehe, wäre es glaubich am sinnvollsten auf xml zurückzugreifen
    für alles eine eigene variable anzulegen ist ja recht viel arbeit und da die daten (so wie ich das sehe alles strings, evtl noch zahlen) alle ähnlcih sind sollte das die beste möglichkeit sein.

    EDIT: falls du doch bei deinem plan bleiben wills sieh dir mal dictionary an. du musst eben nur konsequente namen beibehalten, dann sollte das funktionieren

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

    Naja mit XML hab ich so keine wirkliche Erfahrung :(

    Ein Grundgerüst könnte würde mir da bestimmt weiter helfen und eventuell wie ich das noch abfrage :)

    Also mit For-Schleife kenn ich mich noch aus ^^
    Zumindestens läuft es ähnlich wie bei PHP ab :)

    Aber wie ich dann an die einzelnen Knoten-Punkte ran komme weiss ich nur nicht so genau :(

    Luftpost schrieb:

    Mein vorhaben ist eben das ich eine Klasse MeineArrays erstellen möchte die ich dann seperat über beispiel mit: MeineArrays(Frak) Aufrufen kann

    Na, dann mach doch genau das.

    VB.NET-Quellcode

    1. Public Class Options
    2. Public KlasseL(0 To 6) As String
    3. Public KlasseZ(0 To 6) As String
    4. Public Frak(0 To 2) As String
    5. Public Magi_Prie_HelmLicht(0 To 1) As String
    6. Public Heid_Orak_HelmZorn(0 To 1) As String
    7. Public Sub New()
    8. Frak(0) = "--- Bitte Wählen ---"
    9. Frak(1) = "Allianz des Lichts"
    10. Frak(2) = "Bund des Zorns"
    11. KlasseZ(0) = "Wähle deine Klasse"
    12. KlasseZ(1) = "Heide"
    13. KlasseZ(2) = "Orakel"
    14. KlasseZ(3) = "Krieger"
    15. KlasseZ(4) = "Wächter"
    16. KlasseZ(5) = "Jäger"
    17. KlasseZ(6) = "Assasine"
    18. KlasseL(0) = "Wähle deine Klasse"
    19. KlasseL(1) = "Magier"
    20. KlasseL(2) = "Priester"
    21. KlasseL(3) = "Kämpfer"
    22. KlasseL(4) = "Verteidiger"
    23. KlasseL(5) = "Bogenschütze"
    24. KlasseL(6) = "Waldläufer"
    25. Magi_Prie_HelmLicht(0) = "Bitte Wählen"
    26. Magi_Prie_HelmLicht(1) = "Kupferhelm (LvL: 1)"
    27. Heid_Orak_HelmZorn(0) = "Bitte Wählen"
    28. Heid_Orak_HelmZorn(1) = "Stahlhut (LvL: 1)"
    29. End Sub
    30. End Class

    Der Zugriff geht aber nicht über MeineArrays(Frak), sondern:

    VB.NET-Quellcode

    1. dim opt as new Options
    2. msgbox(opt.Frak(2)) ' ausgabe: "Bund des Zorns"
    1. Dein Ansatz ist komplett falsch. DAS versteht man zur Not, ohne zu verstehen, WAS du jetzt GENAU machen willst.
    2. Um den richtigen Ansatz zu finden, muss man erstmal sein Problem genau beschreiben/definieren um DANACH das ganze zu abstrahieren.
    3. Es ist unklug, solche "Eigenschaften" hardcoded im Programmtext zu hinterlegen. Jedesmal wenn du was ändern willst oder musst, heißt das nämlich, dass du die Anwendung neu kompilieren und verteilen muss. Solche Sachen legt man also in einer externen Datei ab (Text, XML, Datenbank, wasauchimmer)

    picoflop schrieb:

    1. Dein Ansatz ist komplett falsch.
    Findich bisserl strong formuliert. Zumal du keinen besseren Ansatz lieferst, sondern in 2. aussagst, dass zumindest dir Informationen fehlen, um einen Ansatz zu entwickeln - wie kannst du da so sicher sein, dieser Ansatz sei nun komplett falsch?.

    Natürlich isser falsch, es ist ja auch nur ein Ansatz. ZB.

    picoflop schrieb:

    3. Es ist unklug, solche "Eigenschaften" hardcoded im Programmtext zu hinterlegen.

    Vollkommene Zustimmung.

    Habe extra diese ungeeignete Array-Form 1:1 übernommen, weil die gewiss keinen Bestand haben wird. Aber bessere Alternativen gibts wohl hunderte, unds wär total beliebig gewesen, eine davon jetzt auszuprogrammieren, nur für einen Post.

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

    ErfinderDesRades schrieb:

    Findich bisserl strong formuliert.

    "If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck."

    DASS der Ansatz falsch ist, sieht man sofort, denn offensichtlich wird komplett OO-frei programmiert. Und bei dem beabsichtigten Zweck (Rollenspielähnliches irgendwas) ist OO ganz offensichtlich hilfreich. Außerdem zeigen die verwendeten Elemente das eine Datenbank im Hintergrund offensichtlich hilfreich wäre.

    eine davon jetzt auszuprogrammieren, nur für einen Post.

    ... ist ja erstmal gar nicht nötig. Erstmal die genaue Problemstellung kennen.
    Ich habe vor einen Planer zu Programmieren :)

    Und über ComboBoxen möchte ich per Arrays btw Arraylist die Daten eintragen und anzeigen lassen :)

    Allerdings da meine Liste unendlich lang sein wird im Quellcode wollte ich es per Klasse machen, damit mein Quellcode im Hauptprogramm überschaubar bleibt...

    Meine Datenbank dazu hab ich im Programm schon angelegt, da ich aber relativ noch etwas wenig davon weiss und noch nicht so genau weiss wie ich diese zu hand haben soll war mir das mit den Arrays vorerst eine Variable Lösung :D

    Das Problem dabei ist bei den Arrays das ich verschiedene Variablen benutze (Frak, Klassen etc...)

    Es kommen dazu ja noch mehr, und wenn ich dies in mein Hauptprogramm alles schreiben wollen würde, dann wäre ich irgendwann bei Zeile(10999) und wenn dann ein Fehler ist den ich selbst nicht genau eingrenzen kann und genauso wenig das Programm, dann wird es an dem Punkt irgendwann mal Kritisch :)

    Daher dacht ich erstmal mit einer Klasse probieren :)

    Die Daten sollen im Programm bleiben das ist auch so gewollt, auch was das Compilieren an geht, da ich es mehr oder minder von Framework 3.0 bis zur neusten Version updaten muss ^^

    Hoffe man versteht jetzt mein Vorhaben :)

    PS: Bei Fragen nur zu Beisse nicht, noch nicht xDD

    MfG

    LuftPost

    Luftpost schrieb:

    Ich habe vor einen Planer zu Programmieren

    Wassn fürn Planer? - es macht mir wirklich nichts aus, so genaue Informationen zu erhalten, dassichmir auch was drunner vorstellen kann.

    Da hat Picoflop natürlich recht - wenn du bereits mit DB unterwegs bist, wäre es ganz idiotisch, selbstgebastelte Datenobjekte zu frickeln.

    Guggemol "Datenbank in 10 Minuten" auf Movie-Tuts, was da für hübsche Datenobjekte bei rauskommen.

    Und nochmehr recht hatter, weil man muß sich ein Datenmodell ausdenken, sonst kannman das mitte DB auch lassen.
    Zu Datenmodellierung sollteste das Main.doc des genannten Tuts studieren.

    Und dann vlt. ein Screenshot deines Datenmodells posten und erläutern - vlt. versteh ich dann auch besser, von was fürn Planer du sprichst.
    Also das mit Arrays sollte ja nicht immer so Bleiben sondern lediglich vorerst als übergangslösung sein :)

    Klar ist es Idiotisch erst mit Arrays anzufangen wenn man dafür die entsprechende Datenbank schon zu 80% fertig gestellt hat :)

    *Siehe Bild*

    Da sieht man verschiedene Comboboxen mit Arrays klappt es bisher noch recht gut wie es mit der DB aussieht weiss ich noch nicht so ganz genau :)

    Es ist wie man es auf dem Bild sicherlich erkennen kann ein Ausrüstungsplaner für ein MMORPG namens Shaiya :)
    Bilder
    • SP00.JPG

      49,2 kB, 1.025×770, 231 mal angesehen
    Ich glaub, du kämest sogar ohne DB aus, was die Sache sehr vereinfachen würde - gugge DB-Programmierung ohne Datenbank

    Das ändert aber nichts am Erfordernis einer fundierten Datenmodellierung, und mit

    ErfinderDesRades schrieb:

    Und dann vlt. ein Screenshot deines Datenmodells posten und erläutern
    meinte ich zB einen Screenshot des typisierten Datasets, nicht ein Bild von deine derzeitige Gui.

    Du müsstest dich schon intensiv mit genanntem "Main.doc" auseinandersetzen, und auch mit DB-Programmierung ohne Datenbank - ansonsten kannst du keine Datenmodellierung durchführen, und das Prog wird wohl kaum jemals was.