2012年1月16日 星期一

Dictionaries

什麼是 Dictionaries

當資料型態具有 key/value 特性時,就可以使用 Dictionary 類型的集合。它可以用來建立索引表,將任意的 key 與 value 做關連對應。.NET Framework 包含下列 Dictionary 類別:

  • Hashtable :最基本的字典集合,每個項目都是儲存在 DictionaryEntry 物件中的 key/value 組。可透過 key 取得項目的 value。
  • SortedList :類似 Hashtable,會自動以 key 排序集合內的項目。
  • ListDictionary :當集合項目少於10個時,採用這個集合類別效率較佳。
  • HybridDictionary :使用這個集合,當集合項目少於10個時,會採用 ListDictionary ,若項目變大時,會自動轉成 Hashtable
  • OrderedDictionary :類似 Hashtable ,但集合中的項目會依加入的先後順序排列,不像 Hashtable 是依 hashcode 排列。

底下二個是比較特殊類似字典的集合

  • StringDictionary :類似 Hashtable ,但 key/value 都只允許字串型別, Key 不能重複,一個 key 只能對應一個 value 。
  • NameValueCollection :類似 Hashtable ,但 key/value 都只允許字串型別, Key 不能重複,一個 key 可以對應多個 value 。

下列幾點是有關於 Dictionary 的幾點特性:

  • 每個項目都是儲存在 DictionaryEntry 物件中的 Key/Value。
  • Key 必需唯一的。
  • Value 可以是 null ,而且不一定要是唯一的。
  • IDictionary 實作分為三類:唯讀、固定大小、變數大小。
    • 唯讀的 IDictionary 物件無法修改。
    • 固定大小的 IDictionary 物件不允許加入或移除項目,但允許修改現有項目。
    • 變數大小的 IDictionary 物件允許加入、移除和修改項目。

Specialized Collections

前面介紹的集合,其組成項目都是由 Object 構成,當要擷取資料項目時就會用到cast objects。

System.Collections.Specialized 命名空間底下,定義了一些僅允許特定型別的集合類別。 例如:

Generic Collections

How Generics Work

Generics簡述

Generics 是.Net2.0才加入的功能。是一種型別參數的概念,也就是當class或method在設計時,可以先擱置型別,直到用戶端程式要使用時再行處理型別。 目的在於避免run time時需要boxing/unboxing的情況。泛型可以用在.Net中的許多地方,但是最常見的就屬泛型集合類別。

2012年1月7日 星期六

檔案系統

何謂 File System Classes

System.IO 命名空間包含 FileDirectory 等類別,提供管理檔案和目錄的功能。
因為這些物件的方法是靜態 (Static) 或共用成員,所以可以直接使用它們,而不需要先建立類別的執行個體。

與檔案相關的類別,大至可分成二類:

資訊提示(Information):

資訊提示類別大都繼承自FileSystemInfo 基底類別。提供與檔案系統相關的資訊,如 FileInfoDirectoryInfo

公用程式(Utility)。

公用程式類別則提供對檔案系統的操作功能,如 FileDirectoryPath 等類別。

讀寫檔案

何謂 Stream

資料流基本概念

資料流是一種循序或隨機存取資料的方法。也就是針對 byte[] 中的資料做循序或隨機的存取。

壓縮資料流

認識 Compress Stream

.NET Framework 提供二個類別,用來處理壓縮資料。

  • GZIP:使用 GZipStream 類別表示 GZIP 資料格式,它無失真檔案壓縮和解壓縮的工業標準演算法。
  • Deflate:使用 DeflateStream 類別表示結實 (Deflate) 演算法,該演算法是無失真檔案壓縮和解壓縮的工業標準演算法。它使用 LZ77 演算法和 Huffman編碼的組合。

隔離儲存區

什麼是隔離儲存區 (Isolated Storage)

隔離儲存區是為了考量系統安全性,將應用程式限定在少許權限的區域中運作,又可以滿足程式儲存資料的需求。 意思就是該區域中的資料只有該 App 能夠存取,其他的 App 無法存取。 .NET Framework 提供了這樣子的一個儲存機制,用以將應用程式和資料產生關聯,藉以提供資料隔離和安全。 有了隔離儲存區,程式碼不再需要使用唯一的路徑去存取檔案系統中的檔案,而且資料也可進一步受到保護以避免遭受其他應用程式的影響。

隔離儲存區中的資料是依照 user 、 domain 、 assembly 來隔離的。 例如,可依使用者資訊和程式碼組件將資料隔離,限定該隔離區內資料的讀取權限僅限該程式碼,以提升這些資料的安全性,以免受到其他應用程式的影響。 這個機制常應用在ClickOnce相關程式中。