不再使用 set 和 let 不再使用 set 和 let 關鍵字,除非在 class 檔案中設定屬性。因為在 visual basic.net 中不再使用預設(default)屬性和方法,所以不需要靠他們來辨別,你在使用物件的方法與屬性時,若要設定變數值,一定要指明清楚。也就是原先在 vb6 若要設定變數 obj 內容為 objthis,必須要 set obj=objthis 而接收預設屬性則可以 att=objthis 以及 att=objthis.defaultatt 兩種寫法 所以若 objthis 物件有一個預設屬性叫 defaultatt,若不寫 set 會不清楚到底要存取 objthis 物件的參照還是 objthis.defaultatt 這個預設屬性。但到了 visual basic.net,若你要讀取 defaultatt,因為沒有預設屬性的使用方式,所以只有(且一定要)以 objthis.defaultatt 這種寫法來讀取 defaultatt 屬性。 所以當你使用下列程式碼時 obj=objthis 那一定是要 objthis 這個物件參照,而不會模擬兩可。而這種寫法讓 visual basic.net 的語法與 javascript 和 c# 的語法更為接近。 在 visual basic.net 中 class 的屬性撰寫 在 vb 6 要撰寫一個物件的屬性會利用以下的程式碼,其中 property get 是用來讓使用者讀取屬性,而 property set/let 則是用來設定屬性,至於是要使用 set 還是 let 則要看賦予的屬性是物件還是一般的變數型別。 private m_myproperty as variant
public property get myproperty() as variant if isobject(m_myproperty) then set myproperty = m_myproperty else myproperty = m_myproperty end if end property
public property set myproperty(byval vnewvalue as variant) set m_myproperty = vnewvalue end property
public property let myproperty(byval vnewvalue as variant) m_myproperty = vnewvalue end property 但在 visual basic.net 的程式碼要改成 private m_myproperty as string public property myproperty() as string get myproperty = m_myproperty end get
set m_myproperty = value end set end property
這個語法也是與 c# 的語法更為相似。
另外在 visual basic.net 你必須要明確的利用 readonly 或 writeonly 關鍵字來設定屬性是否為唯讀或唯寫,所以程式碼為 public readonly property myproperty() as string get myproperty = m_myproperty end get end property 或是
public writeonly property myproperty() as string set m_myproperty = value end se t end property
subroutines 和 functionsvisual basic.net 在呼叫與使用 subroutine 和 function 上也有許多改變
variant 型別在使用上一般比較沒有效率,但可能在某些地方用起來比較方便,例如從資料庫承接可能會傳回 null 的欄位,程式碼如右 dim rec as recordset set rec = new recordset rec.open "select region from northwind.dbo.customers where customerid='alfki'", "provider=sqloledb;data souce=(local);initail catalog=northiwnd;user id=sa;" dim res as variant res = rec.fields(0) if isnull(res) then msgbox "內容是 null" else msgbox res end if 在 visual basic.net 的 intrinsic 資料型別有型態 資料型態名稱大小預設值 數字byte1 byte(8 bits) 0 short2 bytes(16 bits) 0 integer4 bytes(32 bits) 0 long8 bytes(64 bits) 0 single4 bytes(32 bits) 0.0 double8 bytes(64 bits) 0.0 decimal12 bytes(96 bits) 0.0unicode 文字string "" char 2 bytes(16 bits) ""其他型別boolean false date #01/01/0001 12:00:00am# 注意,不再支援 currency 型別,可以使用 decimal 型別取代
宣告變數、常數和陣列 在 visual basic.net 有增加一些在宣告變數、常數和陣列方面的語法,在宣告的同時可以賦予值--宣告的語句與執行的語法相似 dim x as integer=24 dim y as integer= x*24
const my_number=42 const my_number as integer=42 const my_string = "hello world" const my_string as string = "hello world" 注意,與 vb6 不相容的是在同一個宣告的語句中只能宣告一種型態,所以不能有下列的語法。 dim x as integer, y as string 也因此 dim x,y as integer 會宣告 x 和 y 兩個變數都是整數型別。 dim 關鍵字也可以宣告初始化過的陣列 dim myarray(20) as integer dim myarray(5) as integer = (1,2,3,4,5) dim myarray(3) as string = ("bill", "fred", "mary") 陣列一定要透過 dim 宣告,若以空的括號,內不定義數字,則該陣列可以在之後重新定義大小。redim 可以用來重新定義陣列的大小,但不能改變陣列的維度。 dim myarray() as integer redim myarray(20)
dim myarray(,,) '<---透過逗號來定義陣列的維度 redim myarray(20,10,5)