建立泛型類
首先介紹乙個一般的,
非泛型的簡化鍊錶類
,可以包含任意型別的物件
,以後再把這個類轉化為泛型類.
在立案表中,
乙個元素引用下乙個元素
.所以必須建立乙個類
,他將物件封裝在鍊錶中
,並引用下乙個物件.類
linkedlistnode
包含乙個屬性
value,
該屬性用建構函式初始化,另外
,linkedlistnode
,這些元素都可以從屬性中訪問.
public class linkedlistnode
public linkedlistnode(object value)
this.value = value;
public object value
public linkedlistnode next
public linkedlistnode prev
再來看linkedlist類
public class linkedlist : ienumerable
public linkedlistnode first
public linkedlistnode last
public linkedlistnode addlast(object node)
var newnode = new linkedlistnode(node);
if (first==null)
first = newnode;
newnode.prev = last;
last = first;
else
linkedlistnode previous = last;
last.next = newnode;
last = newnode;
last.prev = previous;
return newnode;
public ienumerator getenumerator()
linkedlistnode current = first;
while (current!=null)
yield return current.value;
current = current.next;
這個類包含linkedlistnode
型別的first
和last屬性,
他們分別標記了鍊錶的頭尾
.addlast()
方法在鏈表層新增乙個新元素
.首先建立乙個
linkedlistnode
型別的物件
.如果連彪是空的
,first
和last
屬性就設定為改新元素;否則
,就把新元素新增為鍊錶中的最後乙個元素
.該類還實現了乙個介面了
,後面介紹.
接下來我們在main
函式中使用
linkedlist類.
var list1 = new linkedlist();
list1.addlast(2);
list1.addlast(3);
list1.addlast("6");
foreach (int item in list1)
console.writeline(item);
console.readkey();
建立乙個linkedlist
類的物件
,新增兩個整數型別而後乙個字串型別
.整數型別要轉換為乙個物件
,所以要執行裝箱操作.通過
foreach
迴圈可以實現拆裝箱操作
.上述**會出現乙個異常
,因為把子弟三個元素強制轉換為
int時會失敗.
接下來建立鍊錶的泛型版本
public class linkedlistnode
public linkedlistnode(t value)
this.value = value;
public t value
get;
private set;
public linkedlistnodenext
public linkedlistnodeprev
泛型類的定義與一般類類似,
只要使用泛型型別宣告.之後
,泛型型別就可以在類中用作乙個欄位程豔
,或者方法的引數型別
.linkedlistnode
類用乙個泛型型別t宣告
.屬性value
的型別是
t,而不是
object.
建構函式也變為可以接受
t型別的物件
.也可以返回和設定泛型型別
,所以屬性
next
和prev
的型別是
linkedlistnode.
下面把linkedlist
類也改為泛型類
public class linkedlist: ienumerable
public linkedlistnodefirst
public linkedlistnodelast
public linkedlistnodeaddlast(t node)
var newnode = new linkedlistnode(node);
if (first==null)
first = newnode;
newnode.prev = last;
last = first;
else
linkedlistnodeprevious = last;
last.next = newnode;
last = newnode;
last.prev = previous;
return newnode;
public ienumeratorgetenumerator()
linkedlistnodecurrent = first;
while (current!=null)
yield return current.value;
current = current.next;
ienumerable ienumerable.getenumerator()
return getenumerator();
linkedlist包含
linkedlistnode
元素.linkedlist
中的型別
t定義了型別
t的屬性
first
和last.addlast
方法現在接受型別
t的引數
,並例項化
linkedlistnode
型別的物件.
除了ienumerable介面,
還有乙個泛型版本
ienumerable.ienumerable
派生自ienumerable,
新增了返回
ienumerator
的getenumerable()
方法,linkedlist
實現泛型介面
ienumerable.
在main
函式中實現
linkedlist:
var list2 = new linkedlist();
list2.addlast(2);
list2.addlast(3);
list2.addlast(4);
"5");
foreach (var item in list2)
console.writeline(item);
console.readkey();
使用泛型類linkedlist,
可以用int
型別例項化它
,且無需裝箱操作
.如果不使用
addlast()
方法傳遞
int,
就是出現乙個錯誤
,.使用
ienumerable,foreach
語句也是型別安全的,如果
foreach
語句中的變數不是
int,
就會出現編譯錯誤
,而不是執行異常.
每個處理物件型別的類都可以有泛型實現方式.另外,
如果類使用了層次結構
,泛型就非常有助於消除型別強制轉換操作.
第二十七天
今天主要學習了linux的程序通訊 程序通訊可分為 管道通訊 訊號通訊 共享記憶體和訊息佇列 管道通訊 分無名管道和有名管道,無名管道一般用於父子程序之間 訊號通訊的產生方式 1.按鍵產生 2.硬體異常產生 除數為0,無效儲存訪問等 3.程序用kill函式給另乙個程序發訊號 4.使用者用kill命令...
學習第二十七天
一 this關鍵字 this關鍵字 this動態繫結物件 1 this所在的函式是否是通過new呼叫使用的,如果是指向當前new的物件 2 this是通過物件.函式名 使用,this指代當前呼叫的物件 3 this預設指代window,window指全域性物件 定義的全域性變數,預設定義window...
第二十七天 客服支援
問 產品穩定,產品也有亮點,培訓也上檔次,文件也齊全。確實,客服這回清閒了。那客服的作用是什麼呢?答 客服當然有用了。首先,對於上一講的需求,計算機室人員要交給客服部而不是直接交給開發部。客服部會首先把需求記錄進 需求與bug任務管理系統 內部溝通後,把需求能解決的解決,解決不了的送到開發部測試人員...