創造屬於自己的Generic Collection 
.Net 2.0提供一些generic collection類別給list、堆疊、佇列以及字典等等資料結構使用。事實上,這些這些類別所提供的遠大於您程式上的需求。但有時還是會另外自訂資料結構作為特殊的用途,而不用現成的()。這是目前程式語言以及Framework所要作到的目標。 


我該怎麼作?
(待續)

卑微研究生 發表在 痞客邦 留言(0) 人氣()

宣告安全型別的清單(list) 

安全型別讓撰寫出來的程式碼更容易維護。安全型別的語言在編譯時期就找出bug,而不是在執行時期才被發現。在C# 1.X,宣告的general collection(stack, list)是可以接受任何型別的變數。

1.X版的Framework中,collection所存放的實體為System.Object,且任何變數都源自於System.Object,所以collection可以取得任何型别的變數,換句話說,它並不安全。

假如想宣告一個存放Employee物件的list,在C# 1.X中,會使用到存放System.Object物件的ArrayList。將Employee物件加入到一個collection並不是難事,因為Employee本身就是從System.Object所衍生。如果想從ArrayList中取出Employee物件,只能取得一個Object的參照,如同下面的程式碼:

        Employee theEmployee = (Employee) myArrayList[1];


還有一個更大的問題,沒有一個機制可以阻止把字串或其它型別的物件加入
ArrayList中,如果你從沒想過要取得字串,你也不會去注意這個錯誤的型別。假設今天透過方法(method),你希望存入EmployeeArrayList中,當method在執行時期試圖存入字串並轉成Employee型別,就會產生「例外」。


最後一個問題,就是在.Net 1.Xcollection中,加入數值型別的變數也會發生這個問題,數值型別會照前面的方法裝箱(be boxed),也會被同樣的方法提取(unboxed)

.NET 2.0的新函式庫:System.Collection.Generic命名空間已經解決了這個問題。Generic collection變得更容易使用且能讓你指定型別。宣告時,編譯器只會允許一種型別加入list中。定義一個generic collections需使用一個特別的語法;這個語法使用一個角型括孤來表示。

在這裡你不需要去思索從
collection取回物件這個問題,因為你的code比起無型別的ArrayList
,變得更安全、更容易去維護,而且更容易去使用。


我該怎麼作? 


現在,打開你的Visual Studio 2005,並照著下面的範例Example 1-1作。

http://www.dyu.edu.tw/~f9106007/CSharp/CreateATypeSafeList.rar 



發生了什麼事? 


範例程式產生了兩個類別,Employee:負責處理collectionProgram:由Visual Studio 2005所產生出來的。同樣地也是使用由.NET Framework提供的List類別。

Employee類別包含一個empID、建構以及經過覆寫(override)以用來回傳empID字串的ToString方法。


首先宣告一個存放
Employeelist實體empList,宣告方式如下:

        List<Employee> empList

List<T>這裡,T所表示的意思是目前宣告的List,所存放資料的型別為何。

其實,empList只是一個參照到以new指令產生實體在堆積上(heap)的變數。new指令後面搭配建構子呼叫,如下列所示:

        new List<Employee>()


這個動作會產生「存放Employee實體的list」的實體(存在於堆積),你也可以將前述的兩個動作合在一起。

        List<Employee> empList = new List<Employee>();


接下來宣告第二個List,型別為「存放整數的List」:

        List<int> intList = new List<int>();


現在你可以任意的將整數加進intList或是把Employee加進empList裡。當list裡有了數筆資料,可以利用 foreach來檢視裡面的所有資料:

        foreach(Employee employee in empList)

{

        Console.Write(“{0}”, employee.ToString());

}



關於… 


如果試著將整數存進型別為Employeelist,會發生什麼事呢?將之前的程式稍作修改並重新編譯:

        empList.Add(i*5);

接下來會有兩個錯誤產生:

錯誤        1      最符合的多載方法 'System.Collections.Generic.List<CreateATypeSafeList.Employee>.Add(CreateATypeSafeList.Employee)' 有一些無效的引數 


錯誤        2      引數 '1': 無法從 'int' 轉換為 'CreateATypeSafeList.Employee' 


上面的錯誤告訴我們不能將int的值加入型別為Employeecollection中,因為這其中的轉換是無效的。

卑微研究生 發表在 痞客邦 留言(3) 人氣()

看完九月號的RUN!PC雜誌C++/CLI的單元後,覺得大陸的技術名詞跟台灣差太多了,所以就整理一下目前為止我看過的。

變數宣告 = 變數聲明

回傳值 = 返回值

程式 = 程序

樣板 = 模板

讀取陣列每個元素 = 遍歷陣列

固定長度 = 定長

??? = 深層拜訪

穩固性(robustness) = 魯棒性

物件導向 = 面向對象

類別 = 類

最佳化 = 優化

卑微研究生 發表在 痞客邦 留言(0) 人氣()

網址

不錯的文章,大家可以看看。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

作者: mybigfish (ghoti) 看板: News
標題: [News] 尊重創意權
時間: Wed Sep 21 17:48:48 2005

尊重創意權

陳函謙 2005.09.21  中國時報

小綠人燈號,究竟創意來自何方,當事人各說各話,在你來我往中,創意的
保護反而被忽視了。

依據官方說法,當年為了設置倒數行人號誌,邀集業者提供構想,其中康申
資訊公司提出由數個不同的人形畫面所組成的「小綠人」動畫最受好評,當
年提案的康申資訊只領到一張感謝狀,並未因此取得採購優先權。

日前官員要為小綠人慶生,居首功的動畫設計者張銘順早已被遺忘,倒是不
斷出現「小綠人的媽」之類往官員臉上貼金說法,絲毫不尊重原創者,才使
張銘順忍無可忍,跳出來大加駁斥。

風波中,只見官員不斷硬拗小綠人是「集體創意的構想和嘗試」,不是出自
於「哪個人」的單獨發想;對於何謂「智慧財產權」,則毫不尊重。

經濟部智慧財產局網站上,去年六月曾有公告說明,依著作權法規定,小綠
人「似應認屬通用之符號」,「創作度未達最起碼標準」,不受著作權之保
護。

小綠人事件,可以看出政府公部門並未尊重創意,而「創意」是未來台灣發
展經濟的重要動力,相關單位若不重視此一問題,將不利推動創意產業。

卑微研究生 發表在 痞客邦 留言(0) 人氣()