Announcement

Collapse
No announcement yet.

Count im Array um 1 erhöhen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Count im Array um 1 erhöhen

    Hallo zusammen,
    gibt es eine Möglichkeit in einem von mir erstelleten Array den Count automatisch hochzählen zu lassen ?

    Hier mein Code:

    [highlight=vbnet]

    Public Class ArrayLocalF
    Public Count As Long
    Public Name As String

    Public Sub New( ByVal Name As String)
    Dim MyCount as long
    'hier die Anzahl ermitteln,wie...???

    Me.Count = MyCount
    Me.Name = Name
    End Sub

    Public Overrides Function ToString() As String
    Return Me.Name
    End Function
    End Class
    [/highlight]

  • #2
    willst du die Anzahl der Instanzen deiner Klassen zählen?
    Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

    Comment


    • #3
      Hallo,

      durch verwendung von statischen Member (Shared in VB.net) können diese an die Klasse gebunden werden, anstatt an eine Instanz dieser Klasse.

      Im Beispiel ist weiters gezeigt wie der Konstruktor überladen wird. Wird der Standardkonstruktor aufgerufen wird der Name als GUID festgelegt. Dies geschieht indem der Standardkonstruktor den überladenen Konstruktor aufruft der als Argument den Namen entgegenimmt.

      Weiters werden die Eigenschaften als Eigenschaften dargestellt und nicht als öffentliche (Public) Variablen. Ganz im Sinne der objekt orientierten Programmierung.

      zB
      [highlight=vbnet]
      Imports System

      Namespace ConsoleApplication1
      Class Program
      Private Shared Sub Main(ByVal args As String())
      Dim myArray As ArrayLocalF() = New ArrayLocalF(2) {}
      myArray(0) = New ArrayLocalF()
      myArray(1) = New ArrayLocalF("Test")

      Console.WriteLine(ArrayLocalF.Count)

      For Each a As ArrayLocalF In myArray
      Console.WriteLine(a.Name)
      Next

      Console.ReadKey()
      End Sub
      End Class

      Public Class ArrayLocalF
      #Region "Felder"
      Private Shared _count As Long
      Private _name As String
      #End Region

      #Region "Konstruktor"
      Public Sub New()
      Me.New(Guid.NewGuid().ToString())
      End Sub

      Public Sub New(ByVal name As String)
      _count += 1

      _name = name
      End Sub
      #End Region

      #Region "Eigenschaften"
      Public Shared ReadOnly Property Count() As Long
      Get
      Return _count
      End Get
      End Property

      Public Property Name() As String
      Get
      Return _name
      End Get
      Set(ByVal value As String)
      _name = value
      End Set
      End Property
      #End Region

      #Region "Methoden"
      Public Overrides Function ToString() As String
      Return _name
      End Function
      End Class
      #End Region
      End Namespace
      [/highlight]

      mfG Gü
      Zuletzt editiert von gfoidl; 05.11.2008, 12:43. Reason: ArrayLocalF(1) geändert auf ArrayLocalF(2)
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Nein die Items

        Comment


        • #5
          Wo ist den dein Array? Ich seh nur eine Klasse die du Array genannt hast?

          Comment


          • #6
            @gfoidl

            Danke.... Hat super funktioniert...

            Comment


            • #7
              @Ralf Jansen,
              schau die mal das Beispiel von gfoidl an....
              ...explizit den Aufruf/Declaration myArray im Sub Main

              ....dann siehst du das du ein Array bekommst...

              Comment


              • #8
                ja du hast ein Array in dem sich alle Instanzen deiner Klasse befinden. Aber bedenke eins. Wenn du zwei verschiedene Array erstellst die diese Klasse erhalten bekommst du bei Count nicht mehr die Anzahl der Klassen in einem Array sondern die Gesamtanzahl aller Instanzen der ArrayLocalF Klasse.
                Ralf dachte wohl deine Klasse sollte ein Array darstellen.
                Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                Comment


                • #9
                  Wenn du zwei verschiedene Array erstellst die diese Klasse erhalten bekommst du bei Count nicht mehr die Anzahl der Klassen in einem Array sondern die Gesamtanzahl aller Instanzen der ArrayLocalF Klasse.
                  Wenn bei mehreren Arrays die Anzahl eines Array von Interesse ist geht das dann mit
                  Code:
                  MyArray.Length
                  mfG Gü
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Stimmt:

                    Wenn du zwei verschiedene Array erstellst die diese Klasse erhalten bekommst du bei Count nicht mehr die Anzahl der Klassen in einem Array sondern die Gesamtanzahl aller Instanzen der ArrayLocalF Klasse.
                    Gibt es ne Möglichkeit den Code so zu ändern, dass ich auch im Count den richtigen Wert für beide Array`s bekomme und nicht die Gesamtanzahl von beiden Array`s?

                    Comment


                    • #11
                      siehe oben.

                      Die Klasse weiß nicht wer eine Instanz von ihr verlangt. Es müsste also die Instanz die eine Instanz der Klasse benötigt im Konstruktor mit übergeben werden. Dann in der Klasse über ein Array (oder Liste) gezählt werden - es könnten dan auch 3, 4,... beliebig viele sein.

                      Einfacher ist myArray.Length.

                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment


                      • #12
                        Du solltest dir den Unterschied zwischen 'Array' und 'Objekt im Array' nochmal verdeutlichen.

                        Du versucht 'Array' Information über das 'Objekt im Array' zu erhalten. Das sollte definitiv nicht das Probleme des Objekts sein da dur dir so nur Problem wegen enger Kopplung zwischen diesen Objekten ins Boot holst.

                        Zum Beispiel folgt aus dem Lösungsvorschlag von gfoidl das das Objekt, also dein ArrayLocalF Objekt, im Array nur genau zu einem Array gehören kann und die selbe Instanz nicht in zwei Arrays benutzt werden kann(wegen dem parenting des Arrays).

                        Dein ArrayLocalF Objekt sollte wenn möglichst nichts über das umgebende verwaltende Object (Array, Collections, Lists und weiß der Teufel was man sich noch einfallen lassen könnte) wissen. Also hol dir den Count direkt vom Array (Array.Length) und nicht über ArrayLocalF.

                        Comment


                        • #13
                          Mit einer Überladung würde es gehn:

                          Code:
                          Public Sub New(ByVal Name As String, ByVal NewInstance As Boolean)
                              If NewInstance = True Then _Count = 1
                          Beim ersten Aufruf

                          myArray(0) = new ArrayLocalF("Test1",True)

                          ab dem zweiten

                          myArray(1) = new ArrayLocalF("Test2")

                          ...macht so etwas Sinn...?

                          Comment


                          • #14
                            ...macht so etwas Sinn...?
                            Nein.

                            Siehe Erklärung von Ralf.

                            mfG Gü
                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                            Comment


                            • #15
                              OK.
                              Wenn ich die Anzahl benötige macht das Sinn über .Lenght zu gehen...

                              ...aber, gäbe es eine Möglichkeit z.B. einen Zähler Mitzählen zu lassen um z.B. eine ID Automatisch mitzuzählen...

                              z.B.

                              MyArray(0).ID soll z.B. 1
                              MyArray(1).ID soll z.B. 2
                              usw.

                              Ich weiss das macht in diesem Fall so keinen Sinn, aber gäbe es so eine Möglichkeit...?

                              Comment

                              Working...
                              X