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