VB.NET Hashtable用法相關概念詳解
大家知道VB語言嗎?它的作用為程序員帶來了不一樣的體驗。在這里首先來了解一下VB.NET Hashtable用法的相關概念。在我的程序中她的靚影在各處閃現;她是你的過客還是情人,在我的程序中她是永恒的女主角。說到如何充分的利用Hashtable,我會在我的另一篇文章《解耦利器:Hashtable》中詳細闡述,這里就介紹一下她是怎樣撒嬌的吧。#t#
大家都知道Hashtable說白了就是鍵值對,當然她的一些Hash函數美妙無語,但如果我們使用.NET或Java進行開發時對于常用的類,jdk中HashCode函數已經重寫好了,不用我們勞神,所以大概明白Hashtable的基本概念就可以在程序中盡情的擁抱她了。
廢話少說,言歸正題。
VB.NET Hashtable用法中最直白的使用方法就是
- Dim ht As New Hashtable
- Dim key As String = "___"
- Dim value As String = "___"
- ht.Add(key, value)
這個時候她表現的特別乖,什么小差都沒開。好,下面我們把她包裝一下,女主角是要有些矜持的。
- Public Class TestHashtableClass
TestHashtable- Private ht As New Hashtable
- Public Sub setParameter()Sub
setParameter(ByRef key As String,
ByRef value As Object)- Me.ht.Add(key, value)
- End Sub
- End Class
這里很直白,就不解釋了,如果VB.NET Hashtable用法中這樣使用這個類是不會有問題的
- Dim testHashtable As New
TestHashtable- testHashtable.setParameter
("key", "value")
工作的很正常,大小姐依然很乖,:-)下面我們換一種value的傳入方式,不再使用一個常量,而是使用一個屬性。我們先創建一個帶有只讀屬性的類
- Public Class TestObjectClass
TestObject- Public ReadOnly Property aaa
()Property aaa() As Integer- Get
- System.Diagnostics.Debug.
WriteLine("aaa.get")- Return 10
- End Get
- End Property
- End Class
在VB.NET Hashtable用法程序中這樣調用
- Dim testHashtable As
New TestHashtable- Dim o As New TestHashtable.
TestObject- testHashtable.setParameter
("a", o.aaa)
^_^ 一切正常,關鍵的時刻來臨了,我們的小公主就要撒嬌啦。下面我們改造一下TestObject
- Public Class TestObjectClass
TestObject- Public Property aaa()Property
aaa() As Integer- Get
- System.Diagnostics.Debug.WriteLine
("aaa.get")- Return 10
- End Get
- Set(ByVal value As Integer)
- System.Diagnostics.Debug.WriteLine
("aaa.set")- End Set
- End Property
- End Class
注意這里把只讀屬性變成了可讀寫屬性,調用代碼依然是那三句不變,我們在第三行加上一個斷點,OK,F5運行,到達斷點后,我們小心翼翼的F11一步步運行,首先執行到了TestObject中的屬性Get中,這是預期的,沒有問題,退出Get后,程序執行setParameter中的語句,這也是預期的,go on,退出setParameter后,再按一下F11,o(∩_∩)o...哈哈,小公主撒嬌啦,她任性的走進了TestObject中屬性的Set中!真是不乖,怎么可以到處亂跑呢,這樣你會無意踏壞花花草草呀,如果在set中不是一句打印語句,而是一個終止程序命令,你就惹大禍啦。
如何解決這個問題呢,其實很簡單,只要在傳入屬性前,先把屬性的值賦給一個變量,再把這個變量傳給VB.NET Hashtable用法就好了。
她在VB.NET中不乖,那她到了C#中會不會有所收斂呢。我們把上面的代碼全部用C#改寫,發現上面所說的情況沒有發生,一切正常,set并沒有被調用。
如果把上面的兩個類做成一個VB.NET Hashtable用法中的類庫,把它加入到一個解決方案中,在C#中調用這兩個類,你會發現根本就沒有辦法直接調用屬性傳入setParameter,會出現編譯錯誤,要求必須將其先存到一個變量中才可以,根本就沒有給她留下撒嬌的機會。
這樣看來,如果說C#是一位嚴父,根本不允許撒嬌的存在,那么VB.NET就是一位慈母,她是那么的包容,又是那么的縱容!