Klasse richtig Instanzieren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Klasse richtig Instanzieren

    Hey Leute ,
    ich würde gerne Wissen wie ich richtig etwas instanzieren kann.
    Nehmen wir an ich habe die Funktion Test, dessen Inhalt dieser Code ist

    VB.NET-Quellcode

    1. Function Test
    2. Dim Teststring as String ="Test"
    3. Dim IInteger as Integer = 0

    Nun wenn ich diese Funktion instanzieren will ,wie muss ich sie instanzieren ?

    VB.NET-Quellcode

    1. Dim Testt as New Test
    geht nicht.
    Du kannst Instanzen von Klassen erstellen, nicht von einer Funktion.

    VB.NET-Quellcode

    1. Public Class Test
    2. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Function-Anweisung (Visual Basic)
    msdn.microsoft.com/de-de/library/sect4ck6.aspx

    Sub-Anweisung (Visual Basic)
    msdn.microsoft.com/de-de/library/dz1z94ha.aspx

    Objekte und Klassen in Visual Basic
    msdn.microsoft.com/de-de/library/527aztek.aspx

    Objektorientiertes Programmieren in Visual Basic
    msdn.microsoft.com/de-de/library/b86b82w0(v=vs.90).aspx

    Eine Funktion müsste dann z.B. so aussehen:

    VB.NET-Quellcode

    1. Private Function Addition(a as Integer, b as Integer) as Integer
    2. return a + b
    3. End Function


    Eine Sub-Routine (kein Rückgabewert wie bei einer Funktion):

    VB.NET-Quellcode

    1. Private Sub Addition(a as Integer, b as Integer)
    2. MessageBox.Show(a+b)
    3. End Sub


    Betreffend objektorientierte Programmierung und Instanzen hilft dir vielleicht das Beispiel mit der Klasse "Car".

    VB.NET-Quellcode

    1. Public Class Car
    2. Private _Modell As String
    3. Private _Leistung As Integer
    4. Private _Geschwindigkeit as Integer
    5. Public ReadOnly Property Modell As String
    6. Get
    7. Return _Modell
    8. End Get
    9. End Property
    10. Public ReadOnly Property Leistung As Integer
    11. Get
    12. Return _Leistung
    13. End Get
    14. End Property
    15. Public ReadOnly Property Geschwindigkeit As Integer
    16. Get
    17. Return _Geschwindigkeit
    18. End Get
    19. End Property
    20. Public Sub New(modell as String, leistung as Integer)
    21. _Modell = modell
    22. _Leistung = leistung
    23. End Sub
    24. Public Sub Beschleunigen
    25. _Geschwindigkeit = _Geschwindigkeit + 10;
    26. End Sub
    27. Public Sub Bremsen
    28. if _Geschwindigkeit >= 10 then
    29. _Geschwindigkeit = _Geschwindigkeit - 10;
    30. End if
    31. End Sub
    32. End Class


    Property-Anweisung
    msdn.microsoft.com/de-de/library/zzh9ha57.aspx

    Verwenden von Konstruktoren und Destruktoren
    msdn.microsoft.com/de-de/library/2z08e49e(v=vs.90).aspx

    Jetzt könntest du die Klasse z.B. so nutzen:

    VB.NET-Quellcode

    1. Dim bmw as New Car("BMW 530", 200)
    2. Dim vw as New Car("VW Golf", 100)
    3. bmw.Beschleunigen
    4. MessageBox.Show(bmw.Geschwindigkeit) ' 10
    5. vw.Beschleunigen
    6. MessageBox.Show(vw.Geschwindigkeit) ' 10
    7. bmw.Beschleunigen
    8. bmw.Beschleunigen
    9. MessageBox.Show(bmw.Geschwindigkeit) ' 30
    10. vw.Bremsen
    11. MessageBox.Show(vw.Geschwindigkeit) ' 0


    Du kannst dann also Instanzen von "Car" erstellen. Hast also quasi mehrere Autos. Beachte das "New" in Zeile 1 und 2 und dann schaue dir in der Klasse "Car" Zeile 24 an.
    Und wenn du jetzt z.B. bei der Instanz "vw " die Sub-Routine "Bremsen" aufrufst, wird die Geschwindigkeit auch nur für das Auto geändert und nicht etwa auch bei "bmw".

    Grüße
    concu

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

    Mete1997 schrieb:

    wieso man etwas instanzieren sollte
    Weil objektorientierte Programmierung so funktioniert.
    Du musst mit New ein Objekt anlegen, die Instanz einer Klasse.
    Eine Funktion kannst Du nicht instanziieren, sie ist stets Teil einer Klasse, Du kannst sie verwenden, wenn Du eine Instanz dieser Klasse erzeugt hast.
    Nehmen wie an, Du machst ein Auto-Renn-Spiel.
    Du hast eine Klasse Wagen und am Start stehen 5 Autos. Da brauchst Du 5 Instanzen der Klasse Wagen, mit denen Du dann fahren kannst.
    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!
    Außerdem heißt es instanziieren. Das muss man machen, weil Klassen Referenztypen sind und man kann nur mit Objekten arbeiten. Eine Klasse ist aber kein Objekt, foglich muss man ein neues erstellen. Dieses Objekt teägt dann die Instanz der Klasse mit der gearbeitet werden kann.
    Die Klasse ist aber nur der Bauplan.
    #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 :!:
    Das instanziieren macht OO erst möglich. New legt dir eine Instanz der Klasse (deren Felder) auf den managed Heap und gibt dir dann den Zeiger zurück. Die Funktionen der Klasse sind später genau 1 mal in der PE drin. An diese wird dann implizit der Klassenzeiger übergeben und so kannst du von Memberfunktionen auf Felder der Klasse oder andere Funktionen zugreifen. Das sind Referenztypen, Wertetypen komm'n auf den Stack. Am Ende macht der GC dann deine Instanz platt und gibt den Speicher wieder frei.
    Einfach ausgedrückt (is glaub ich sogar ausn Entwicklerbuch):
    Eine Klasse kannste vergleichen wie ein Förmchen beim Sandkasten spielen. Du kannst mit dem Förmchen so nicht wirklich was machen, jedoch hat es bestimmte Eigenschaften (zB. Viereckig, Blume, die generelle Größe, ...). Nun tuste Sand in das Förmchen (vergleichbar mit "New") drehst es um und anschließend hast du die erstelle Form (Objekt) mit dem du dann arbeiten kannst. Und das tolle daran ist, dass du mit dem einen Förmchen so viele Formen daraus erstellen kannst wie du willst (also viele Objekte).

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Die Form ist dabei aber nur der Plan für das Aussehen des geformten Sandes (Objekts).
    Musste jetzt noch rein. :P
    #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 :!: