Массивы как объекты
Оказывается, массив – это объект. Объект класса 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.