2006年08月30日

C# 2.0的新特色.泛型與匿名函數

在C# 2.0中,加入泛型的功能。以往在1.X版中,使用堆疊、佇列等資料結構,只能用object型態,並沒辦法把型態固定下來,使得資料中摻雜一種以上的資料型態。一不注意,程式就容易發生Runtime的錯誤。幸好在2.0中,這些的問題獲得改善。

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    delegate void Function(int x);
    class Program
    {
        static void myFunction(Function f)
        {
            f(6);  
        }
       
        static void Main(string[] args)
        {
            Console.WriteLine("以下是泛型的執行結果");
            Stack<int> myStack = new Stack<int>();

            for (int i = 0; i < 10; i++)
            {
                myStack.Push(i);
            }

            foreach (int i in myStack)
                Console.WriteLine(i);
       
            Console.WriteLine("以下是匿名函數的用法");
            myFunction(delegate(int x){Console.WriteLine("印出:" + x);});
            myFunction(delegate(int x) { Console.WriteLine("印出:" + (x + 2)); });
           
            Function a = new Function(delegate(int x) { Console.WriteLine("第一個"); });
            a += delegate(int x) { Console.WriteLine("第二個"); };
            a += delegate(int x) { Console.WriteLine("第三個,並印出X:"+x.ToString()); };
            a(3);
           
           
        }
    }
}

從上面的程式碼,我們看到:

        Stack<int> myStack = new Stack<int>();

在1.X版中,是沒辦法用<>指定型態,在2.0中,我們可以在一些的常見資料結構中指定型態,減少Runtime上的錯誤。上例中,如果加入像"myStack.Push(6.11)"這一行的程式碼,編譯器就會產生編譯錯誤,這樣的好處就在程式的bug在程式人員這邊就可以發現,而不是到了測試人員甚至是使者用那邊才被發現。

另外在2.0版中,還加入了匿名函數的功能,也就是能將程式碼當作參數。

    delegate void Function(int x);
    class Program
    {
        static void myFunction(Function f)
        {
            f(6);  
        }
    }........(略)

假設在一個函式中,想將部份的功能交給別人去作,可以使用delegate型態。上面的Function函數將回傳設為void,參數為一個int的x。這樣的作法,在於只需將規格訂好,剩下內部的實作,就交給其它應該負責的人去作就好了。而在myFunction中,使用到一次f參數,f內部怎麼作,不需要知道,只要在使用時,記得將程式碼加進去就好了。

            myFunction(delegate(int x){Console.WriteLine("印出:" + x);});
            myFunction(delegate(int x) { Console.WriteLine("印出:" + (x + 2)); });

上面的程式碼,第一個會將變數x印出,第二個則是將x加2之後再印出。除此之外,匿名函數還有另一種用法:

            Function a = new Function(delegate(int x) { Console.WriteLine("第一個"); });
            a += delegate(int x) { Console.WriteLine("第二個"); };
            a += delegate(int x) { Console.WriteLine("第三個,並印出X:"+x.ToString()); };
            a(3);

a變數在宣告時,已經加入了一行程式碼,或者說是一個函數,之後再加入兩個函數。執行a的時候,是加入幾個函數就執行幾個函數,並不會有衝突。 

C# 2.0另外兩個新功能,在下期的文章會提到,另外也會補充泛型與匿名函數的內容。


Posted by sholfen at 17:13回應(0)引用(0).Net 技術

網誌主題曲.夜盡殘雪











奈落之夜.宵的武戲配樂


-----

Posted by sholfen at 10:05回應(0)引用(0)網誌主題音樂

2006年08月29日

黃金蛋

前幾天在網路上看到有人貼黃金蛋的照片,所以一時手癢就來試一下。







不是說很完美








-----

Posted by sholfen at 20:01回應(0)引用(0)日記

2006年08月27日

蠻橫支那人的暴力行為

http://tw.news.yahoo.com/article/url/d/a/060827/1/2n0o.html
相關的新聞很多,總之,台灣人真的不愛對支那人心存幻想了。他們是野蠻民族!

新聞如下:
正在泰國舉行的曼谷國際少年運動會,26號發生北京代表隊連續搶走我國金牌選手披在身上的中華民國國旗。對於北京代表隊這樣的動作,台北市代表隊領隊金溥聰,第一時間已經向大會表達嚴正抗議,並且要求北京隊道歉。台北市長馬英九也表達了北市府的立場,要求北京代表隊,為其不當言行道歉。(林麗玉報導)

2006年曼谷國際少年運動會,發生北京代表隊職員,連續搶走我奪金選手,批在身上的中華民國國旗,事情是發生在26號,台北市代表隊陳儀柔,獲得五十公尺自由式金牌,上台領獎時,走到一半,經過北京隊選手的觀眾席,卻被北京隊職員衝上前將我國旗扯下。隨後男子組一百公尺蛙式金牌的劉士瑋上台領獎時,同樣又被搶走國旗。台北市代表隊領隊,副市長金溥聰,隨即向ICG大會發出嚴正抗議,並且要求北京代表隊道歉,台北市新聞處長羅智成說,台北市長馬英九第一時間,與金副市長越洋瞭解情況,表達北市府的立場是,要求北京代表隊為不當言行道歉。新聞處長表示,市長馬英九譴責北京代表隊職員,不過不會影響台北市未來出席國際活動,而副市長金溥聰27號就會回國,回國之後,北市府還會進行更完整的立場聲明。

Posted by sholfen at 21:11回應(1)引用(0)毒舌評論

2006年08月18日

逐漸凋零的T-SQL

幾位工程師在開發專案超過一年後,給我一個結論:T-SQL該功成身退了。這個曾經加強SQL Server 資料庫功能的老舊語言該被取代了。

為什麼他們會下這樣的結論呢?主要的原因是:

  1. CLR整合進SQL Server 2005
  2. LINQ
  3. 缺乏創新的T-SQL

CLR整合進SQL Server 2005
從2000年到2005年,微軟花費相當多的資源將CLR以及.NET Framewrok整合至SQL Server 2005 裡。現在你可以使用VB.NET或C#去產生觸發程序,預存程序、自訂函數、custom data tpyes,以及custom aggregates。微軟花費相當多的心力確保在SQL Server裡CLR有很好的執行效能。

LINQ
微軟目前在研發LINQ(Language Integrated Query),一種結合database-style 以及OOP 語言(物件導向語言,像是VB.NET和C#)的技術。你可以在VB.NET和C#語言上利用LINQ加入queries 去讀取資源來源像是資料庫、物件以及XML。最棒的是,它還有提供工具以及語法去處理multiple heterogeneous data source。有關更多LINQ的資訊,可以翻翻Mar/Apr 2006那期的CoDe magazine。但可惜的是,我認為LINQ並不會加在開發代號為"Orcas"的下一版Visual Studio。

缺乏創新的T-SQL
最後也是最重要的就是T-SQL這語言缺乏創新。這五年來,T-SQL的進步相當少。當T-SQL已經擁有使用者自訂函數、例外處理以及更多的SQL能力,但語言上的改變卻相當少。它仍然只是個程序性語言和笨重的傢伙。T-SQL需要提供OOP的架構像是classes、properies、methods等等。

結論
由以上三點可知,T-SQL需要結構上以及工具的更新。其中一個選擇是將T-SQL加進物件導向功能或是由LINQ和CLR結合,來取代現行SQL上的語言。

原文網址:(需有EPS帳號才能閱讀完整版)
http://www.code-magazine.com/Article.aspx?quickid=0607011


Posted by sholfen at 0:45回應(0)引用(0)翻譯文章

2006年08月17日

一人捐一百?別鬧了啦!

最近宿舍的第四台已經沒了,所以也沒在看新聞,不過多少還是知道一些。對於施明德發起的倒扁活動,接觸到相關的新聞不多,但老實講,這一連串所謂的倒扁活動,我真的是覺得夠了。泛藍在亂,親綠學者在亂,民進黨的新潮流派系在亂,是要鬧到什麼時候啊!好啦!有些人可能會說這是社會正義的表現,隨便啦!可是,一個總統要下台,是有程序的吧。擺免案沒過,泛藍還是在鬧,這也就算了,反正這種政黨,好人才根本浮不上檯面,能在電視上亮相,只剩秋液這種跳樑小丑而已。

但,民進黨內部卻也在搞鬥爭,尤其是那個新潮流,不要跟我說你們有什麼偉大的理想,利用統派媒體打壓自己的同志,怎麼看都覺得很下流。講得有點遠了,我只想說,雖然阿扁他真的不得民心了,但要他下台總也得要有個正當理由吧。每個人都說他污了不少,那就叫司法單位趕快查啊!那個秋液不要再爆一堆料,要爆誰不會啊。我說秋液一直出現在媒體前,是因為想進運演藝圈,好多賺點錢買假髮,要爆大家就一起來爆。

什麼全民倒扁、全民嗆扁,什麼鬼活動,一看就覺得很沒營養。施明德現在也來跟流行,拜託,自以為很有號召力?還在搞造神運動嗎?這麼一搞,中間付出的社會成本有多少,讓台灣這樣的動盪,我看外資都跑光了。一個社會如果持續的不安定,那外國還敢來投資嗎?在統派媒體不斷的炒作下,外國人對台灣的印象會好我看也很難了........

倒扁、倒扁。就算陳水扁真的下台了,那之後呢?讓呂秀蓮接手?還是那句話,別鬧了,我真的不覺得她適合當總統,呂秀蓮的野心太大,從當副總統之後,就有一直有當總統的野心。雖然她之前嗆中共讓我覺得蠻有種的,不過,也不代表她有這個能力當總統。個人的想法,長久以來,她一直沒扮演好副手的角色,從二千年到現在,一直對她很感冒。如今在媒體的炒作下,呂秀蓮的呼聲似乎被拉高了,這……各位還是想清楚吧。

這篇沒什麼重點,看看就好,不過那活動的捐款,最後的用途以及流向還蠻令人好奇的....我不是說施明德一定會污錢還是怎樣的,只是,這麼多錢到底要怎麼用啊....可以分一點給我嗎XD

Posted by sholfen at 11:06回應(0)引用(0)毒舌評論

2006年08月16日

[新聞]入門版 XNA 開發套件釋出 提供玩家開發 Xbox 360 遊戲

美國微軟於 8 月 13 日發表針對業餘創作者所設計的遊戲開發套件「XNA Game Studio Express」,提供沒有專門開發器材的一般 PC Windows XP 使用者開發跨 Xbox 360 與 PC 平台遊戲的管道。.....more

微軟想的這點子還不錯,只是不知道開發的難易度如何,如果可以像日本的RPG Maker那樣容易上手,說不定真的會掀起一股創作風潮。但是XNA這一套開發工具需要一些程式背景,在北美的影響會如何,就繼續觀察下去吧。

Posted by sholfen at 1:31回應(0)引用(0).Net 技術

2006年08月15日

好書一本



想學ASP.NET的人有福了,.NET高手聖殿祭司又出書了!想買的人請到以下網址:
http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchViewAction.do?isbn=9789861810249&sid=31744

作者網址:
http://blog.sina.com.tw/4907/

Posted by sholfen at 19:29回應(0)引用(0).Net 技術

2006年08月9日

虐貓狂人.方尚文

一個疑似精神有問題,高學歷的虐貓人......


Posted by sholfen at 23:44回應(0)引用(0)未分類文章

2006年08月2日

Ruby的迴圈-Ⅰ

這篇要講的是Ruby迴圈的用法,其實它的方法算蠻多的(比起C#)。通常一般的程式語言,迴圈大多長成下面這個樣子:

for(int i =0;i<5;i++)
{
     printf("My name is sholfen")
}

上面的程式碼會印出字串五次。而在Ruby會比較簡潔:

5.times{puts "My name is sholfen"}


接下來是如何將陣列的所有元素給印出來:

someArray.length.times do |i|

        puts someArray[i]

end

再來介紹的語法,有點像BASIC:

1.step(10, 2) {|x|

puts x

}


執行的結果,會印出1 3 5 7 9這五個奇數。

之後的文章會繼續講其它的迴圈用法,像是For、While等。

Posted by sholfen at 16:30回應(0)引用(0)其它技術
 [1]  [2]  [最終頁]