了解c#的人對typeof這個關鍵字再熟悉不過了。它是獲得物件的類別,返回值是type。
在vb2005中和typeof對位的是gettype。可是,gettype的使用卻充滿著魅惑性。先看看下面的**。
private sub form1_load(byval sender as system.object, byval e as system.eventargs) handles _
mybase.load
debug.print(issame(new solidbrush(color.aliceblue)))
end sub
private function issame(byval brush as brush) as boolean
dim t1 as type = gettype(brush)
dim t2 as type = brush.gettype
return t1 is t2
end function
這段**執行完後,會在「即時視窗」裡顯示什麼?
是false,你想到了嗎?
筆者在移植一段c#**到vb2005**時就碰到了如上的陷阱,使得**在c#中執行正常,而在vb2005中就一直報錯。後來才明白其中的奧妙。
先仔細分析issame中的兩句**。
dimt1
astype =
gettype
(brush)
gettype是關鍵字,獲得指定類的type。這裡的brush表示的是類brush,t1得到的值是類brush
dim t2 as type = brush.gettype
gettype是物件的方法,返回該物件的type。這裡的brush表示的傳遞進來的引數,t2得到的是引數brush的型別,是類solidbrush(應該是結構)
很顯然t1和t2不表示同一種類,故返回值是false。
其實,上面這段**如果改寫成容易識別的就一點問題都沒有了。如下:
private function issame(byval b as brush) as boolean
dim t1 as type = gettype(brush)
dim t2 as type = b.gettype
return t1 is t2
end function
要熟悉gettype的兩種用法,才能明白其中的奧妙,在移植**的時候才不易出錯。
魅惑人心的「三毒」
活法 稻盛和夫.深秋的一天,枯木瑟瑟中,有位路人急急忙忙地往家裡趕。猛一看,腳下散落著很多白色的東西。再仔細一看,原來是人的骨頭。為什麼在這裡會有人骨呢?令人毛骨悚然又不可思議,他繼續前行,一頭正在咆哮的猛虎朝他迎面走來。路人大吃一驚,原來是被這只猛虎吃掉的可憐的同路人的骨頭啊!他一邊想著一邊慌忙轉...
充滿激情的鬥爭
中午工會組織大家開了個會,全面都很平靜,只有最後一兄弟才激情昂揚地說出了我們大家的心願,贏得熱烈的掌聲 我們一定要有實際的action,資本家才可能尊重我們的意見,yes 快走的時候抓起 敏捷開發與實踐?粗略地掃了幾眼,對那些模式基本上話的時間不多,只是有一兩個不熟悉和以前有疑問的才仔細看了看。主要...
充滿期待的2007
上篇對 2006 年的圖書創作工作和心情進行了一下回顧和總結。儘管有一些不如意,但總的來說,還是乙個收穫的年份,至少有多份大獎是我一直期盼的,可算是圓了我的乙個夢。儘管,對於我個人來說,就主要寫作工作來說,2007 年可以說是沒有任何懸念,因為 2007 乃至2008 年或更後的年份的主要寫作工作早...