2016年7月17日 星期日

[C#] 序列化

一、名詞簡釋

在程式中產生的物件都是存在記憶體中,當程式終止後物件就會消失,如果我們想要永久保存這些物件就可以使用序列化,把物件存到檔案系統中,日後要再使用反序列化還原物件即可。
除了保存之外,物件須傳送至網路或遠端服務但對方卻無法辨釋你所定義的類別時,可把物件序列化成Soap或Xml這種通用的格式來傳遞物件。
1.BinaryFormatter 物件序列化成二進位檔,從二進位檔還原回物件
2.XmlSerializer 物件序列化成Xml檔,從Xml檔還原回物件
3.SoapFormatter 物件序列化成Soap檔,從Soap檔還原回物件

2016年7月16日 星期六

[C#]ArrayList、List、HashTable、Dictonary有什麼不同?

一、用途

ArrayList、List、HashTable、Dictonary是C#中常用的集合類別,比傳統的陣列固定大小不易增刪,它們都具備add()新增,remove()刪除,clear()清空,contains()是否包含…等方法,當陣列無法滿足你的須求時可以考慮一下這些集合類別。
因為都屬System.Collections命名空間,所以使用前要先using System.Collections匯入命名空間。


二、比較表

 
儲存型態
儲存型別
使用場合
ArrayList
index,value
Object 
使用同一種方式處理集合內所有元素,且元素型別不同
List
index,value
<Type>
使用同一種方式處理集合內所有元素,且元素型別相同
Hashtable
key,value
Object
須用key個別取元素,元素型別不同
Dictionary
key,value
<KeyType,ValueType>
須用key個別取元素,元素型別相同

2016年7月14日 星期四

[C#]如何預防Dead Lock發生

一、DeadLock 成立條件

DeadLock 成立有4個必要條件(4個條件要都成立才會有Deadlock)
1.Mutual exclusion
資源在同一時間只能有一個process使用
2.Hold & wait
process佔用資源同時又取等待其它process的資源
3.No preemption
process不能為了得到它想要的資源而把原來持有該資源的主人趕走
4.Circular waiting
P1(R1) > P2(R2) > P3(R3) > P1(R1)


2016年7月11日 星期一

[C#]virtual, abstract, new, override有什麼不同?

一、用途

C#中有virtual, abstract, new, override四個關鍵字用來管理類別繼承時函數的覆寫關係。

二、virtual, abstract, new, override四種關鍵字的比較表

關鍵字 中文 使用類別 說明
virtual 虛擬方法 父類別 宣告方法且實作,預期子類別會覆寫
abstract 抽象方法 父類別 只宣告方法不實作
new 覆寫方法 子類別 覆寫父類別宣告的方法
override 覆寫方法 子類別 覆寫父類別宣告的方法

2016年7月10日 星期日

C#題庫

以下為c#在面試中常出的問題,也有附上參考答案。

一.填空題
1.c#中的三元運算符是_____?
Ans. (expression) ? (if true) : (if false)
2.當整數a賦值給一個object物件時,整數a將會被_____?
Ans. 裝箱
3.類成員有_____種可訪問形式?

關鍵字 中文翻譯 同一Class 繼承的Class 同一namesapce 不同namesapce
Private 私有 不可 不可 不可
Protected 保護 不可 不可
Internal 內部 不可 不可
Protected Internal 保護內部 不可 Protected和Internal的聯集
Public 公共