跳到主要內容

發表文章

目前顯示的是 8月, 2017的文章

C# 泛型

為什麼要使用泛型Generic 這次要提到的是泛型,也是這次我負責上課的部分。 我會就自己的吸收用自己的理解來說明什麼是泛型。 泛型簡單的說就是 C# 2.0 提出的一種新的集合類別,用於汰換掉 .NET 1.1 的非泛型集合類別。 以 List<T> 為例子,就是拿來汰換掉 ArrayList 用的。 以前 ArrayList 提出也是為了解決某些問題而發明出來的類別,主要是解決程式碼重複的問題。 為了儲存 int 需要設計一個儲存 int 的集合類別,為了儲存 string 需要一個儲存 string 的集合類別。 所以不如設計一個 ArrayList 可以儲存 int 也可以儲存 string 。這是怎麼做到的呢? 原理就是因為型別都是來至於 object ,因此只要將所有型別的先轉換成 object 存起來,然後要用的時候再取出來,然後從 object 轉型回原本儲存的型別就好,這就是 ArrayList 。 講完 ArrayList,來說說 List<T> ,泛型是在實例化的時候確定使用的型別,以便於在編譯時期就可以判斷型別安全性,也因此帶出泛型與 ArrayList 比較後的優點。可以讓編譯器來保護程式碼。至於程式碼重複這個優點泛型跟 ArrayList 一樣都有,另外還有一個 優點,那就是效能。 ArrayList 出了什麼問題呢? 最主要的問題就是轉型,因為儲存成 object ,存入時跟取出時都需要做轉型,這稱為 Boxing / UnBoxing,從 int 轉型成 object 稱為 Boxing;反之從 object 轉成 int 就是 UnBoxing了,這耗費效能。但 List<T> 因為在實例化的時候就指定好型別的,因此沒有這個問題。 以上三個好處,程式碼重複使用、型別安全性、效能,就是以泛型集合類別取代非泛型集合類別的好處。

c# recap

最近在新公司受到了文化衝擊以及能力衝擊。剛好公司有開很多課程可以學習。就積極地報名了。 這次的課程是C#的一些介紹 var, dynamic, anonymous type, nullable<T>, extension method 這邊先提到var. var有寫過C#或是JavaScript的人一定都用過。但或許不知道何時該用或是何時不該用。這次的課程讓我比較清楚了點。 var 是隱含型別,也是一種強型別是在C#3.0的時候新增的。是一種在編譯時期就會檢查的型別。使用上必須給預設值,不然會compiler error. Do: 除了不能用的情境以外盡量使用! Don't: var x; 沒有初始化不能使用!