当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  在VB.NET中撒娇的Hashtable

 在VB.NET中撒娇的Hashtable

点击次数:36 次 发布日期:2008-11-26 22:30:17 作者:源代码网
源代码网推荐      Hashtable不知是不是你的常客,在我的程序中她的靓影在各处闪现;她是你的过客还是情人,在我的程序中她是永恒的女主角。
源代码网推荐   说到如何充分的利用Hashtable,我会在我的另一篇文章《解耦利器:Hashtable》中详细阐述,这里就介绍一下她是怎样撒娇的吧。
源代码网推荐   大家都知道Hashtable说白了就是键值对,当然她的一些hash函数美妙无语,但如果我们使用.NET或Java进行开发时对于常用的类,jdk中hashCode函数已经重写好了,不用我们劳神,所以大概明白Hashtable的基本概念就可以在程序中尽情的拥抱她了。
源代码网推荐   废话少说,言归正题。
源代码网推荐   Hashtable最直白的使用方法就是 1Dim ht As New Hashtable
源代码网推荐  2Dim key As String = "___"
源代码网推荐  3Dim value As String = "___"
源代码网推荐  4ht.Add(key, value) 这个时候她表现的特别乖,什么小差都没开。
源代码网推荐   好,下面我们把她包装一下,女主角是要有些矜持的。
源代码网推荐  1Public Class TestHashtableClass TestHashtable
源代码网推荐  2 Private ht As New Hashtable
源代码网推荐  3
源代码网推荐  4 Public Sub setParameter()Sub setParameter(ByRef key As String, ByRef value As Object)
源代码网推荐  5 Me.ht.Add(key, value)
源代码网推荐  6 End Sub
源代码网推荐  7End Class 这里很直白,就不解释了,如果这样使用这个类是不会有问题的 1Dim testHashtable As New TestHashtable
源代码网推荐  2testHashtable.setParameter("key", "value")
源代码网推荐   工作的很正常,大小姐依然很乖,:-)
源代码网推荐   下面我们换一种value的传入方式,不再使用一个常量,而是使用一个属性。我们先创建一个带有只读属性的类
源代码网推荐  
源代码网推荐  1Public Class TestObjectClass TestObject
源代码网推荐  2 Public ReadOnly Property aaa()Property aaa() As Integer
源代码网推荐  3 Get
源代码网推荐  4 System.Diagnostics.Debug.WriteLine("aaa.get")
源代码网推荐  5 Return 10
源代码网推荐  6 End Get
源代码网推荐  7 End Property
源代码网推荐  8End Class
源代码网推荐   在程序中这样调用
源代码网推荐  
源代码网推荐  1Dim testHashtable As New TestHashtable
源代码网推荐  2Dim o As New TestHashtable.TestObject
源代码网推荐  3testHashtable.setParameter("a", o.aaa)
源代码网推荐   ^_^ 一切正常,关键的时刻来临了,我们的小公主就要撒娇啦
源代码网推荐   下面我们改造一下TestObject
源代码网推荐  
源代码网推荐   1Public Class TestObjectClass TestObject
源代码网推荐   2 Public Property aaa()Property aaa() As Integer
源代码网推荐   3 Get
源代码网推荐   4 System.Diagnostics.Debug.WriteLine("aaa.get")
源代码网推荐   5 Return 10
源代码网推荐   6 End Get
源代码网推荐   7 Set(ByVal value As Integer)
源代码网推荐   8 System.Diagnostics.Debug.WriteLine("aaa.set")
源代码网推荐   9 End Set
源代码网推荐  10 End Property
源代码网推荐  11End Class
源代码网推荐  12
源代码网推荐   注意这里把只读属性变成了可读写属性,调用代码依然是那三句不变,我们在第三行加上一个断点,OK,F5运行,到达断点后,我们小心翼翼的F11一步步运行,首先执行到了TestObject中的属性Get中,这是预期的,没有问题,退出Get后,程序执行setParameter中的语句,这也是预期的,go on,退出setParameter后,再按一下F11,o(∩_∩)o...哈哈,小公主撒娇啦,她任性的走进了TestObject中属性的Set中!真是不乖,怎么可以到处乱跑呢,这样你会无意踏坏花花草草呀,如果在set中不是一句打印语句,而是一个终止程序命令,你就惹大祸啦
源代码网推荐   如何解决这个问题呢,其实很简单,只要在传入属性前,先把属性的值赋给一个变量,再把这个变量传给TestHashtable就好了。
源代码网推荐   她在VB.NET中不乖,那她到了C#中会不会有所收敛呢。我们把上面的代码全部用C#改写,发现上面所说的情况没有发生,一切正常,set并没有被调用。
源代码网推荐   如果把上面的两个类做成一个VB.NET的类库,把它加入到一个解决方案中,在C#中调用这两个类,你会发现根本就没有办法直接调用属性传入setParameter,会出现编译错误,要求必须将其先存到一个变量中才可以,根本就没有给她留下撒娇的机会。
源代码网推荐   这样看来,如果说C#是一位严父,根本不允许撒娇的存在,那么VB.NET就是一位慈母,她是那么的包容,又是那么的纵容!
源代码网推荐  
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华