跳到主要內容

發表文章

目前顯示的是 2017的文章

C# 中的Iterator (选代器)

C# 中的 Iterator(选代器) Iterator 是其中一種經常使用的設計模式。當你想列舉一個集合 而不想暴露它的細節時。Iterator 是合適的實現方法。 如大家曾編寫過Iterator 模式的話, 它的寫法 和以下代碼會有點兒相同。 以下是一個用來保存string 的Iterator 編寫一個正確的iterator 是非常沈悶的事。 概然 iterator 是那麼常用, 那應該把它寫在較底層的library 中。讓代碼能夠重用。才是上上之策。 考慮到這點, 其實C# 的團隊早已把Iterator 模式實現在C# 中 。 所以大家其實不需要自己編寫Iterator。 Iterator 的代碼早已定義在一個名為IEnumerator 的Interface 中。但我們要如何使用已定義好的代碼呢? 先看看List 類別的代碼。 從List 的代碼中看到, List 實現了IEnumerable 這個Interface。 在IEnumerable 中 定義了一個名為GetEnumerator 的方法。 該方法的返回類型是IEnumerator。 其實List 這個類別之所以能夠使用foreach來列舉,實際上就是因為它實現了IEnumerable 這個介面。 在實際編釋中,foreach 實際上是呼叫GetEnumerator 。在以下的例子中, 我實現了一個MessageBox 集合來保存類別為Message 的物件 例子 Message的定義 MesaageBox的定義 這時候, MessageBox 還未實現 IEnumerable Interface。 如在這時使用foreach 來列舉MessageBox的話 , 會出現編釋錯誤。 但當MesaageBox實現了IEnumerable 的話, 編譯錯誤就會消失。 最後在GetEnumerator 中加入以下代碼 便能夠使用foreach 列舉集合中的元素了。 當中yield 的意思是可以理解成先return 再執行的意思。所以執行結果會是在 顯示Before Yield 後顯示 "xxx give xxx a message.Content is xxx. It has n

C# XML(輸出教學)

C# XML 輸出教學 XML 是其中一種主流的數據儲存格式之一, 在C# 中, 大概有3種不同的寫法把數據輸出成XML 文件。 在本文中, 我會利用一個簡單的Window form 程式介紹這3種不同的寫法。  以下是範例的XML 格式 <Im>    <Number>xx</Number>    <Name> xxx</Name>    <Type> xxx <Type>    <Data> xxx </Data> </Im> 從以上的結構可輕易看得出, 這個範例是把一張圖片輸出成XML 格式。 這是範例中使用的圖片 成功輸出的XML 文件 在Chrome 中顯示 Window form 程式 XML 輸出方法 方法一 首先要介紹的寫法是利用XMLElement 的操作, 在XmlDocument 中構建XML 節點。 上述程式碼先構建一個全新的XmlDocument, 然後逐一構建節點。 最後把構建的節點放到對應的節點或XML Root 節點下。 成功構建後便使用XmlDocument 中的save 方法輸出XML 文件。 以上要注意的事是使用這種方法生成XML 的話, 如遇到要處理圖片的情況。 請先把圖片轉換成base64 字串後, 再放到節點的inner Text 中。 方法二 第二種方法是利用XmlTextWriter 把xml node 按順序寫入Filestream 中。 最後輸出成XML 文件。 程序碼如下, 和方法1相比, 如遇到要處理圖片的情況下, 則只需把圖片的binary data  放到byte 類型的數組中, 再利用XmlTextWriter中的WriteBase64 方法便可。 不用自行轉換成base64字串。 但要留意的事是 由於是使用XmlTextWriter 是把text 以串流的型式輸出。 所以寫入資料流 時最好要按Xml結構的順序寫入。 因為在串流中append 結構是比較困難的事。 方法三 最後一種方法是使用XML.Serialization 空間下的方法, 個人比

BlockChain

最近Bitcoin 非常火熱, 仲已經突破10000 美元。 令到一向對電子貨幣不熱衷的我 也想了解一下甚麼是Bitcoin 及它是如何發挖出來。   經過一輪網上搜查, 發現Bitcoin 是 Blockchain 技術推行下的副產物。 是通過參與Blockchain 活動而獲得的獎勵。 至於甚麼是Blockchain, 我在Medium 文章中找到一篇有關Blockchain 的文章, 原作者利用簡單的事例來解說甚麼是Blockchain。   因此, 我相信對於資訊科技不熟識的讀者們, 也能夠通過閱讀這篇文章, 理解Blockchain 這種技術的概念。 原文: https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348 但由於原文是英文的關係。 對於英文不太好的讀者們應該很吃力才能閱讀完整篇文章。 但好文不應該受限於語言。 所以我在本文中把上述文章中所講述的Blockchain 概念, 在以下部分簡單地講述一次, 好讓大家也能享受好文。 甚麼是Blockchain Blockchain 其實就是一種利用分步式方法來紀錄一連串網絡交易的技術。 把交易資料紀錄在各自的檔案中。 所謂的Block(本文中的Page) 是指紀錄交易的檔案。 而當Page的容量存滿後再產生新的Page 來紀錄交易的過程就像是一段永不間斷的鏈(chain) 我想這就是叫做Blockchain 的原因了(XD) 解釋得很抽象?? 來看看以下的情境吧! 試想像你在銀行匯款給朋友或家人, 銀行的職員會把這次的交易資料紀錄下來。 最簡單的一筆交易紀錄包括的資料有金額、匯款人、收款人和交易時間。 而保持這筆交易紀錄的人 就是第三方的銀行。 而在Blockchain 中, 則是相反。 保持這筆交易的人則是在同一網內的交易者。 即是自己紀錄。 同一網內?? 簡單內說, 就一是群想進行交易和紀帳的人(可以是家人, 朋友或陌生人) 組成一個網絡, 大家只會對交易紀錄, 但大家不會知道大家的真實身份。  而在這個網絡內進行的交易,都是由這個網絡內的每一人紀錄。 如A君向B君 匯款 則每位人士都會檢驗A是否有足夠的金錢進行匯款。 如檢驗後的結果為足夠的話, 大家會把這筆交易紀錄在各自的檔案中(檔案大小有限制)