將陣列指示項放在變數上,不要放在型別上之討論

在前一篇「MSDN的範例程式碼不見了」談到了一個小主題是「將陣列指示項放在變數上,不要放在型別」算是解了我一個Visual Basic上的疑問。但今天在寫一段程式碼時出現問題,讓我把這個「陣列指示項」完全搞清楚了。

' 宣告a是一個String陣列
Dim a As String()
' 宣告b是一個String陣列
Dim b() As String

以上是兩種宣告陣列的方法,在Visual Basic正式的用法是下方「變數b()」,「將陣列指示項放在變數上」方法。

ArrayList

但在寫一段程式碼時:
'Dim coll As New ArrayList()
Dim coll() As New ArrayList

很直覺的把第一行的程式碼改為第二行,但改了第二行後,程式都還沒執行Visual Studio就已經提示有問題:

修改陣列指示項
奇怪,MSDN的建議馬上破功,到底是怎麼回事?在反覆查資料及思考後,終於看到關鍵點了「ArrayList 建構函式」:

ArrayList() 建構函式
原來ArrayList()不是陣列,而是Sub New()無參數建構式,也就是說原始第一行「Dim coll As New ArrayList()」建立一個型別ArrayList的coll的Instance並初始化,那個最後的()不是陣列的意思,而是初始化。

再舉個例子,我們常用的System.Data.SqlClient中,常使用的SqlCommand類別也有一個無參數建構式:

' SqlConnection() 無參數建構式
' SqlConnection() 無參數建構式
Dim conn As New SqlConnection()
conn.ConnectionString = "..."

' SqlCommand() 無參數建構式
Dim cmd As New SqlCommand()
cmd.Connection = conn
)

我們不一定要一開始就使用帶參數建構式,也能先使用無參數的建構式,後面再來設定各參數或屬性。我們在設定無參數建構式時,不一定要在最後面使用(),但使用()是比較嚴僅的方法,例如使用ToString,你可以直接使用ToString不加(),但使用ToString()是比較好的方法,因為看到()就知道這是個方法。這是一個不錯的經驗,讓我完全了解「()」在不同地方的用法,這部份在MSDN上完全沒有討論哦。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。