命名空間 System.Drawing 提供建立或修改影像 (image) 的方法。 例如:
- add circles, lines, and other shapes
- create charts from scratch
- edit and resize pictures
- change the compression ratios of pictures
- crop and zoom pictures
- add copyright logos or text to pictures
命名空間 System.Drawing 提供建立或修改影像 (image) 的方法。 例如:
當宣告一個字串或數值變數並給定一些資料後,若須要將這些資料儲存起來,我想這沒多大問題,甚至自訂一個格式,日後還可以把它讀入相同型別的變數。 不過,如果這個變數是一個自訂的類別,例如 Employee ,或者一個 .NET 參考型別,如 Font、Hashtable、Datatable 類別等等,那你又會如何儲存呢? 這時,我們需要將物件資料轉成某個特定格式,這樣子才有辨法儲存至檔案、或者傳送給另一個程式、或者透過網路傳輸。 這樣子的一個轉換過程,就稱為 序列化 (Serialization) 。
序列化可分成二個階段:
Image 類別是 GDI 用來處理影像的類別,但是 Image 是一個抽象基底類別,必須藉由 Image.FromFile 或 Image.FromStream 方法,才可建立 instances。 或者由它的二個繼承類別來處理: Bitmap 和 Metafile 。
步驟如下:
當我們使用 BinaryFormatter 或 XmlSerializer 去序列化一個類別時,系統會依設定幫我們直接產生序列化後的資訊。 但是,如果遇到版本的問題,或者某些類別不支援序列化時,導至還原序列化後的資訊不符合需求, 這時候就是使用自訂序列化的時候,也就是覆寫.NET Framework內建的序列化程式,並自行撰寫程式碼以控制序列化後的資訊。 使用自訂序列化,可以在不破壞該類別的前提下,達到上述問題的解決。
若要自訂序列化,就要實作 ISerializable 介面,並且將 Serializable 屬性套用到該類別即可。
這個方法和建構函式的參數都是 SerializationInfo 和 StreamingContext 型別。
在 GetObjectData 方法之中,主要必須撰寫的程式碼,就是使用 AddValue 方法,將想要序列化的變數,以 name/value 方式加入到 SerializationInfo 物件之中。
使 SerializationInfo 這個物件具有足夠的序列化資訊,以便在還原序列化過程中用來重建該物件。
Collection | Dictionary | Collection<T> | Dictionary<T,U> | |
基本型 | ArrayList | Hashtable | List<T> | Dictionary<T,U> |
字串型別 | StringCollection | StringDictionary :1 key -> 1 value NameValueCollection :1 key -> n value | List<T> | Dictionary<T,U> |
Bool型別 | BitArray | |||
連續型的 | Stack :LIFO Queue :FIFO | Stack<T> Queue<T> | ||
item 順序 | SortedList :順序依 key 值自動排序 OrderedDictionary :順序維持加入的順序 | SortedList<T,U> SortedDictionaryt<T,U> Dictionary<T,U> | ||
存取效能 | ListDictionary :適合項目小於 10 個的集合。 HybridDictionary :項目無法預期時,這個類別會自動調整。 | Dictionary<T,U> |
文字處理是很頻繁的例行工作,Regular Expression 正是一個複雜,但有效率的文字處理技術。
RegExp簡單的觀念就是先建立一組 pattern 字串, 再用這組字串去和資料做筆對。
例如判斷字串中是否含有"abc",或者含有email,或者含有身份證格式的文字....
「碼」:將原本的資訊,以特別的代號來表示,只要知道每種代號的意義,就能以代號來獲知原本的資訊。 例如:._ _... _._. 就是摩斯電碼。還有像 ASCII, BIG5, UTF8 ... 都是一種「碼」。
我們都知道,電腦中的文字,都必須使用某種編碼標準(encoding standard)進行編碼(encoding)後,才可以存放在記憶體或檔案中。只是這個編碼與解碼的過程,通常系統都會自動幫我們處理。 不過,有時候我們還是必須手動處理這個編碼與解碼的過程,例如:要將資料和Unix系統交換時,或者要以指定的編碼標準處理文字檔案等等。 其實,每一種編碼標準都是為了轉換 byte value 與 character。 就像 ASCII 就是一種老舊但也是最廣泛使用的編碼標準之一。 例如其中 0x41 = A, 0x61 = a ...。 不過,因為這個編碼標準對非英語系的支援非常有限,所以也就延伸出各種 Unicode 的編碼標準以支援各種語言。
當資料型態具有 key/value 特性時,就可以使用 Dictionary 類型的集合。它可以用來建立索引表,將任意的 key 與 value 做關連對應。.NET Framework 包含下列 Dictionary 類別:
底下二個是比較特殊類似字典的集合
前面介紹的集合,其組成項目都是由 Object 構成,當要擷取資料項目時就會用到cast objects。
在 System.Collections.Specialized 命名空間底下,定義了一些僅允許特定型別的集合類別。 例如:
Generics 是.Net2.0才加入的功能。是一種型別參數的概念,也就是當class或method在設計時,可以先擱置型別,直到用戶端程式要使用時再行處理型別。 目的在於避免run time時需要boxing/unboxing的情況。泛型可以用在.Net中的許多地方,但是最常見的就屬泛型集合類別。
System.IO 命名空間包含 File 和 Directory 等類別,提供管理檔案和目錄的功能。
因為這些物件的方法是靜態 (Static) 或共用成員,所以可以直接使用它們,而不需要先建立類別的執行個體。
與檔案相關的類別,大至可分成二類:
資訊提示類別大都繼承自FileSystemInfo 基底類別。提供與檔案系統相關的資訊,如 FileInfo 與 DirectoryInfo 。
.NET Framework 提供二個類別,用來處理壓縮資料。
隔離儲存區是為了考量系統安全性,將應用程式限定在少許權限的區域中運作,又可以滿足程式儲存資料的需求。 意思就是該區域中的資料只有該 App 能夠存取,其他的 App 無法存取。 .NET Framework 提供了這樣子的一個儲存機制,用以將應用程式和資料產生關聯,藉以提供資料隔離和安全。 有了隔離儲存區,程式碼不再需要使用唯一的路徑去存取檔案系統中的檔案,而且資料也可進一步受到保護以避免遭受其他應用程式的影響。
隔離儲存區中的資料是依照 user 、 domain 、 assembly 來隔離的。 例如,可依使用者資訊和程式碼組件將資料隔離,限定該隔離區內資料的讀取權限僅限該程式碼,以提升這些資料的安全性,以免受到其他應用程式的影響。 這個機制常應用在ClickOnce相關程式中。