В чем разница между Dim v As String() и Dim v() As String?
Это может показаться тривиальным, но в чем разница между Dim v As String() и Dim v() As String в VB.NET?
Ответы
Ответ 1
Никакой разницы. Из Спецификация языка VB.NET для массивов:
Типы массивов указываются путем добавления модификатора к существующему имени типа . Модификатор состоит из левой скобки, набора из нуля или более запятых и правой скобки.
...
Переменная также может быть объявлена как тип массива, помещая модификатор типа массива или модификатор инициализации массива в имя переменной . В этом случае тип элемента массива является типом, указанным в объявлении, а размеры массива определяются модификатором имени переменной. Для ясности недопустимо иметь модификатор типа массива как для имени переменной, так и для имени типа в той же декларации.
Ответ 2
Первоначально, в Basic, вам приходилось определять массивы, но не переменные. И типы переменных были определены символом суффикса: A $- строка, а A% - целое число, а A # - двойная точность. (и все три были отличными и могли использоваться одновременно) (Для одноточности вы можете использовать A!, но это было по умолчанию, если вы только что использовали A)
В конце концов, программисты поняли, что это были невероятно плохие варианты дизайна.
Чтобы исправить это, Microsoft добавила "Option Explicit", которая требовала предопределения каждой переменной. Чтобы уменьшить влияние на язык, они захватывают команду "DIM", которая использовалась для определения массивов, для определения скалярных переменных.
Итак, первоначально:
DIM A(50) ' define 51-element single-precision array
Тогда
DIM A(50) ' define 51-element single-precision array
DIM A$ ' define a string
Затем, чтобы избавиться от суффиксов, они добавили синтаксис "как {type}"
DIM A(50) ' define 51-element single-precision array
DIM B as String
DIM C(50) as String ' define 51-element string array.
Затем они сделали переменную размера массива.
DIM A() ' define single-precision array
DIM B as String
DIM C() as String ' define string array.
Это оставило конфликт в стиле определения, поэтому они разрешили оба:
DIM A() ' define single-precision array
DIM B as String
DIM C() as String ' define string array.
DIM D as String() ' define string array.
Ответ 3
Нет никакой разницы.
Оба Dim v As String()
и Dim v() As String
создадут строковый массив
Ответ 4
Традиционно, в Basic, вы должны поместить скобки после имени переменной. В VB.Net разрешено помещать их после типа, если хотите. Результат такой же, поэтому нет разницы, используя любой синтаксис. Причина этого добавления заключается в том, что вы можете построить массив. Рассмотрим следующий код:
Public Sub MethodThatExpectsAnArray(ByVal arr() As String)
'...
End Sub
Public Sub Main()
Me.MethodThatExpectsAnArray(New String() {"Hello", "World"})
End Sub
В вызове я строю массив "на лету" без какого-либо назначения, кроме непосредственно аргумента метода. Поскольку здесь нет переменной, я должен установить paranthesis после типа. Чтобы разрешить этот синтаксис, Microsoft имела возможность либо изменить, как вы традиционно объявляете массивы в Basic или допускаете оба синтаксиса. Они, конечно, предпочли последний.
Ответ 5
Нет никакой разницы.
Ответ 6
В основном это семантика. Первый читается как create variable "v" of type string array
, а второй - как create array "v" of type string
. В любом случае результатом является тот же массив строк.
Ответ 7
Нет разницы в значении этих двух.
Если вы хотите объявить несколько переменных в одном тусклом заявлении, вторая форма обеспечивает большую гибкость:
dim v(), v2 в качестве строки позволяет объявлять типы массивов и типы без массивов в одном и том же выражении.