programowanieProgramista VB.NET

Jak są realizowane tablice i kolekcje w Visual Basic? Porównaj standardowe tablice, Collection, ArrayList i List(Of T) pod względem możliwości i zastosowania.

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

W Visual Basic istnieje kilka sposobów organizowania zbiorów danych:

  • Standardowe tablice (Dim arr(10) As Integer): statyczny rozmiar, szybki dostęp przez indeks, brak możliwości dynamicznego rozszerzania.

  • Collection (kolekcja obiektowa): dynamicznie rozszerzalna, może przechowywać elementy dowolnych typów (ale bez ścisłej typizacji), dostęp przez klucz i indeks, wspiera For Each.

  • ArrayList (w VB.NET): przestarzała kolekcja, przechowuje obiekty typu Object, nie wspiera generyków (Generic), wymaga rzutowania typów (casting).

  • List(Of T) (w VB.NET): typizowana kolekcja, dynamiczny rozmiar, szybki dostęp, wspiera LINQ, bezpieczna pod względem typu danych.

Przykłady użycia:

Standardowa tablica:

Dim numbers(4) As Integer numbers(0) = 10

Collection:

Dim coll As New Collection() coll.Add("apple") coll.Add(123) For Each item In coll Debug.Print(item) Next

ArrayList:

Dim arrList As New ArrayList() arrList.Add("abc") arrList.Add(123)

List(Of T):

Dim list As New List(Of Integer)() list.Add(10) list.Add(20) For Each num As Integer In list Console.WriteLine(num) Next

Pytanie z podstępem.

Jaki jest główny problem, który może wystąpić podczas pracy z ArrayList w porównaniu z List(Of T)?

Odpowiedź: ArrayList przechowuje elementy jako Object, dlatego wymaga jawnego rzutowania typu (casting) przy dostępie do elementów, co zwiększa ryzyko wystąpienia InvalidCastException w czasie wykonywania. List(Of T) zapewnia ścisłą typizację na etapie kompilacji, eliminując takie błędy.

Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Błąd czasu wykonania Dim n As Integer = CType(arrList(0), Integer) ' OK

Przykłady realnych błędów z powodu nieznajomości subtelności tematu.


Historia

W systemie finansowym aktywnie korzystano ze standardowych tablic do przechowywania danych o dynamicznym rozmiarze. Przy przekroczeniu wcześniej przydzielonego rozmiaru tablice były "przecinane", co powodowało utratę transakcji podczas szczytowych obciążeń.


Historia

Przy pracy z ArrayList dodano do kolekcji ciągi i liczby, a potem próbowano obliczyć sumę elementów. W rezultacie aplikacja zawiesiła się z wyjątkiem przy rzutowaniu typu, ponieważ nie można dodać ciągów do liczb.


Historia

Używano Collection do przechowywania klas zamówień, ale nie sprawdzano typów elementów. W jednym module przez pomyłkę dodano tekst zamiast obiektu zamówienia, co doprowadziło do awarii całej logiki biznesowej przy próbie wywołania metod nieistniejącego obiektu.