ПОНЯТНО О Visual Basic NET (том 2)

Массивы как объекты


Оказывается, массив – это объект. Объект класса Array пространства имен System. Как?! – скажете вы, – мы до сих пор прекрасно работали с массивами и, как говорится, «ни сном, ни духом»! Мы нигде не писали New, не пользовались свойствами и методами массивов.  – Что ж, верно, многим программистам вполне можно работать с массивами и не подозревать, что это объекты. Авторы VB замаскировали этот факт (как мне кажется), чтобы не пугать программистов, переходящих с Visual Basic 6.0 на VB. Массивы-объекты рождаются в вашей программе «нечувствительно» для вас безо всякого New.

И все же, вот как можно создать массив при помощи New:

        Dim a() As Integer = New

Integer() {8, 1, 4, 3}

Нам будут полезны некоторые свойства и методы массивов (см. процедуру):

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

    Dim a() As Integer = {80, 60, 50, 90, 40, 20, 50, 70}

    Dim t(,) As Integer = {{99, 99, 99, 99, 99}, {99, -8, -14, -19, -18}, {99, 25, 28, 26, 20}, {99, 11, 18, 20, 25}}

    Debug.WriteLine(a.Length)                          'Длина массива a (число элементов) = 8

    Debug.WriteLine(t.Length)                           'Длина массива t (число элементов) = 20

    Debug.WriteLine(t.GetUpperBound(0))      'Число строк (макс. индекс первого измерения) - 1   = 3

    Debug.WriteLine(t.GetUpperBound(1))      'Число столбцов (макс. индекс второго измерения) - 1 = 4

    'Ищется первое вхождение числа 50 в одномерный массив a и находится его индекс (2):



    Debug.WriteLine(Array.IndexOf(a, 50))  

    'Ищется последнее вхождение числа 50 в одномерный массив a и находится его индекс (6):

    Debug.WriteLine(Array.LastIndexOf(a, 50))

    Debug.WriteLine(Array.IndexOf(a, 55))        'Ищется число 55 в массиве a и не находится (-1)

    Array.Reverse(a)      'Все элементы массива a меняют порядок на обратный = {70, 50, 20, 40, 90, 50, 60, 80}

    Array.Sort(a)            'Все элементы массива a сортируются по возрастанию = {20, 40, 50, 50, 60, 70, 80, 90}

    Array.Clear(a, 4, 3)  'Обнуляется 3 элемента массива a, начиная с индекса 4= {20, 40, 50, 50, 0, 0, 0, 90}

End Sub

Из приведенных методов некоторые имеют несколько вариантов, которые я здесь не привожу.

Замечание. Учитывая, что массив – это объект, я призываю вас до поры не присваивать массив массиву целиком, без индексов, например, вот так:

        Dim a() As Integer = {8, 1, 5, 2}

        Dim b() As Integer

        b = a

Присвоение, конечно, состоится, но совсем не такое, как вы ждали. Оно может привести к неожиданным для начинающих последствиям. Вот к каким, например. Продолжу фрагмент:

        a(2) = 99

        Debug.WriteLine(b(2))

Напечатается 99, а не 5,  потому что массив – это объект. Почему? Расскажу позднее, в 27.2.



Содержание раздела