C 高階程式設計二十七天 建立泛型類

2021-07-03 12:05:38 字數 4248 閱讀 3206

建立泛型類

首先介紹乙個一般的,

非泛型的簡化鍊錶類

,可以包含任意型別的物件

,以後再把這個類轉化為泛型類.

在立案表中,

乙個元素引用下乙個元素

.所以必須建立乙個類

,他將物件封裝在鍊錶中

,並引用下乙個物件.類

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任務管理系統 內部溝通後,把需求能解決的解決,解決不了的送到開發部測試人員...