贊助商連結

五月 01, 2006

可以指定為Null的實值型別 (Nullable Type)

| 原始連結

在 C# 中包括了 Byte、int32、Single、char、DateTime 等實值型別的基本資料型態,這些基本資料型態是不可指定為 null 的,因為這些實值型別在記憶體中是以所存放的內容為值,不論它的內容是什麼都無法被視為 null,但有時後我就是想要將一個整數或是日期指定為 null ,例如我將朋友的姓名、年紀、生日用程式建檔的時後常常會發生這種情況,我並不知道他們真正的年紀或是生日,但是如果我在年紀那一欄填入 0 或是 -1 總是覺得非常不合理,跟本不會有人是 0 歲,生日那欄我也不知道應該填哪個日期才對,因為 DateTime 不能指定為 null , 以往處理這種事情總是要想辦法繞一大圈來判斷所填入的值到底是真的資料還是因為不知道該填什麼所以給它亂填一通的無效資料,在 .net 2.0 裏特別為了這種情況加入了可指定為 Null 的實值型別 Nullable Type,事實上 Nullable Type 就是在背後偷偷的將實值型別包裝起來而擁有指定為 null 的能力。

宣告一個 Nullable Type 的實值型別僅僅只需要在型別後面加上一個問號。


Nullable Type 的變數有兩個很重要的成員

  1. HasValue:取得值,指出目前 Nullable 物件是否有值。
  2. Value:取得目前的 Nullable 值。

利用判斷 HasValue 是否為 true 可以得知目前的變數是有值的變數或是null,如果 HasValue為 true則可以用 Value 來取得值。


很高興有了 Nullable Type ,讓我們可以更簡單的處理不明的實值型別。

在C#中使用VB.NET的My物件

| 原始連結

不可否認VB.NET真是簡單易用的好東西,雖然我依然不會用VB.NET去開發產品但是我還是希望能從VB.NET中拿到一點點的好處。
到了.Net 2.0微軟更是在VB.NET中增加了方更的My物件,從此世界變得更美好,VB.NET的開發者們也感到深深自豪。「哇哈哈!寫個郵件瀏覽器只要半小時。」

如果C#也能夠用My物件那會是件多棒的事啊。

一個不為人知的鐵則,那就是不論你在想什麼,地球的另一邊也會有人跟你想著同一件事,真的有人嘗試把My物件帶入C#中,而且效果很棒,看來這不會只是一個空泛的幻想而已,我也來包裝My物件到C#裏試試看吧。

首先讓我們來看看My物件的架構模型,在Windows Form 專案中My物件像是這個樣子。
 


另外在Web專案中,My 隱藏不相關的物件例如My.Forms所以會有點不一樣

 


以此看來My物件本身會對專案的類型不同而有所變化,為了適應不同的專案類型還是分別寫成各別的My物件比較好,在開始之前還有些事要做,那就是參考Microsoft.VisualBasic的組件到專案中,這樣才方便直接引用VB.NET中的好東西。

 



好了首先是Windows Form 專案下的My物件:


完成後到別的專案中引用果然成功了….

 

由於手頭上沒有多餘的網頁空間我把完整的範例程式碼放到這裏,不過因為我用非常偷懶的方式直接引用Microsoft.VisualBasic組件中的物件所以還要另外加入參考,建議想要實際再專案中使用My物件的人還是用這位仁兄的版本會比較完善一點。

遵循標準

| 原始連結

我計畫再過幾個月要買一台新的桌上型電腦,這台電腦要有最新最酷的硬體配備及超大容量的記憶體,這樣我用它來開發程式的時後就可以同時開起Vistal Studio、SQL2005還有VM而不會感到想抓狂,我會給它配上夠快的3D顯示卡,拿它來玩刺激的遊戲絕對是種享受,實在是太美妙啦。
不過在此之前我面臨很多選擇,從CPU到主機板到用哪家的顯示卡,什麼樣子的機殼等等的,還好不管我怎麼選最後一定會把電腦組裝起來大玩特玩。
因為所有的零件都會遵循工業標準的規格去設計所以不管是任何人來做都會做的跟我一好,有個標準可以遵循是好的,但是什麼才是標準每個人的看法可能就不一樣了。

還記得W3C制 定的Web標準與微軟標準的大戰嗎,我們總是不能確定會不會有人用奇怪的瀏覽器看自己寫的網頁,當你用framepage寫了一個網頁並且自信滿滿的將網 址公佈出去後,在某個角落正有人對你寫的擠成一團亂的頁面抱怨,這時Firefox的使用者馬上會跳出來大吼,「嘿!你知道嗎,這個爛網頁跟本看不到任何 東西。」然後你又小心的把網頁改成符合W3C標準,但是又有更多IE使用者開不了你的網頁,最後你發現用IE的人比用Firefox還多,於是就在網頁註 明「請使用IE6.0以上版本瀏覽本站,Firefox使用者請至Mozilla網站繼續討論你們自己的瀏覽器」這就是ie-only網站至今還那麼多的原因,畢竟使用IE的人還是佔大多數。

經 過實際的統計,曾經來過這裏的一萬個連線中大約有八千七百個以上是來自IE6,有近一千個來自Firefox,IE5約兩百五十個,剩下來Opera、 IE7 beta及不明瀏覽器只有一點點,很明顯使用IE6的人仍然是最多的,所以這個網站的設計上決對會讓IE6的使用者看來起正常,當然我很清楚Web標準帶 來的好處,如果你正在用Firefox看這篇文章應該也不會有什麼障礙才對(有發現什麼問題的話麻煩通知我好嗎),至於IE5及Opera的使用者只能說 聲抱歉了,我知道你可能會看到一個歪七扭八的網頁,但是我還是不打算用太多CSS Hack的技巧來相容舊版的瀏覽器,那只是吃力不討好的苦差事,或者你可以到Mozilla下載Firefox來用,至少這是可以讓你在這裏正常的看文章最簡單的做法。

在 我的觀念裏只有多數人在用的才是真正的世界標準,一個完全遵循Web標準但是IE打不開的網頁如同廢物,不管Mozilla忠實教徒多麼恨IE,它就是最 多人在用的東西,我還是會依照W3C制定的準則去開發Web系統以取得一些好處,但是能夠讓較新版本的IE正常瀏覽才是我真正比須去符合的標準。

為什麼要用C#

| 原始連結

好問題!我真的常常被這麼問,尤其是以前用VB6的開發者想要進軍.NET的程式開發就會問這樣的問題,「VB.NET不好嗎?為什麼非要C#不可?」有一大半的原因是他們覺得用被輕視了,因為C#有個”C”而VB.NET有”VB”這個字眼,而聽到一些人說C#比較好,彷彿只要是掛上VB的招牌就一定比較差。

其實這的確沒有什麼好的答案,還記得在很久很久以前的遠古時代有一個被世人所稟棄的爛東西BASIC語言,功能簡易到難以至信的地步,當時的開發人員都笑稱BASIC跟本就是小孩子的玩具(Toy),好吧,跟C語言或是Aassembly比起來BASIC還真的滿像玩具的,但是你知道嗎BASIC還是可以用來做很多有用的事,據我所知目前在船務承攬運送業還是有BASIC的系統存在而且運作良好,哈!看到這裏我知道你一定很驚訝竟然有人用BASIC開發系統,不過這是真的我決對沒有在亂蓋,所以說語言好壞不是用它的功能去評斷的只是你如何去利用語言本身的優點去做出好用的東西,使用者才不會管你是不是用最尖端的技術來完成系統,他們只想要在搜尋列輸入歌名然後就可以聽MP3,或者你的程式能順便幫他清理狗大便而己,另外在2004年時期,全球VB開發者人數約在八百萬左右,而Java只有四百多萬,很顯然的VB才是真正被多數人接受的好東西,所以VB的開發者們,不管別人怎麼說,至少還有八百多萬人跟你們一樣做出了最適合自已的選擇。

「等等,既然VB(VB.NET)那麼好為什麼還要用C#?」

就如同我前面有講的這的確沒有什麼好的答案,對我而言答案很簡單,原因是我只會C#,其它的C、C++、VB、VB.NET及JAVA都不算熟悉,至少還不夠能寫出好的程式,如果你已經決定要投入微軟.NET的陣營但是實在不知道該花時間去學習哪個語言的話我還是建議你選擇C#吧。

我會做出這種建議的原因如下:

  1. VB.NET不是VB,所以你就算學VB.NET也沒辦法繼承以往VB開發的經驗,必需要以學習新的東西的方式去看待,否則你反而學不會,因為這兩者真的不一樣,而且觀念天差地遠,別天真的以為你可以一下子就學會怎麼駕駛一台叫作Mazda 3的飛機。
  2. C#本來就是為了 .NET 而生的語言,老實說我覺的C#的真正名字應該就是「.NET」才對。
  3. 綜合上述兩點,反正要投入.NET就是要放棄以往學新的東西,那還不如去學原本 .NET中最正宗的C#語言。
  4. 學習C#後就有比較大的機會再來pure C#網站。(哈)

好了這些都只是我個人建議選擇C#的理由,不一定適用每個人也不是說用VB.NET就會寫出爛程式,如果你還是非要問我C#跟VB.NET哪個好,我當然會說C#比較好,不過那僅僅只是因為我是C#開發者,也許你可以去問問VB.NET的開發者就能找讓你更滿意的答案。