四 泛型(第三部分)

2022-07-26 07:06:08 字數 3620 閱讀 7121

首先介紹乙個一般的、非泛型的簡化鍊錶類,它可以包含任意型別的物件,以後再把這個類轉化為泛型類,以後再把這個類轉化為泛型型別。

在鍊錶中,乙個元素引用下乙個元素。所以必須建立乙個類,它將物件封裝在鍊錶中,並引用下乙個物件。類linkedlistnode包含乙個屬性value,該屬性用建構函式初始化。另外,linkedlistnode類包含對鍊錶中下乙個元素和上乙個元素的引用,這些元素都可以從屬性中訪問(**檔案linkedlistobjects/linkedlistnode.cs)。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

set }

public linkedlistnode(object

_value)

public

linkedlistnode next

internal

set }

public

linkedlistnode prev

internal

set }

}}

linkedlist類包含linkedlistnode型別的first和last屬性,它們分別標記了鍊錶的頭尾。addlast()方法在鍊錶尾新增了乙個新元素。首先建立乙個linkedlistnode型別的物件。如果鍊錶是空的,first和last屬性就設定為該新元素;否則,就把新元素新增為鍊錶的最後乙個元素。通過實現getenumerator()方法,可以用foreach語句遍歷鍊錶。getenumerator()方法使用yield語句建立乙個列舉器型別。

using

system;

using

system.collections;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

set }

public

linkedlistnode last

set }

public linkedlistnode addlast(object

_node)

else

return

newnode;

}public

ienumerator getenumerator()}}

}

現在可以對於任意型別使用linkedlist類了。在下面的**中,例項化了乙個新的linkedlist物件,新增了兩個整數型別和乙個字串型別。整數型別要轉換為乙個物件,所以執行裝箱操作,如前面所述。通過foreach語句執行拆箱操作。在foreach語句中,鍊錶中的元素被強制轉換為整數,所以對於鍊錶中的第三個元素,會發生乙個執行異常,因為把它強制轉換為int時會失敗。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

console.readkey();}}

}

下面建立鍊錶的泛型類版本。泛型類的定義與一般類類似,只是要使用泛型類宣告。之後,泛型型別就可以在類中用作乙個字段成員,或者方法的引數型別。linkedlistnode類用乙個泛型型別t宣告。屬性value的型別是t,而不是object。建構函式也變為可以接受t型別的物件。也可以返回和設定泛型型別,所以屬性next和prev的型別是linkedlistnode。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

set }

public

linkedlistnode(t _value)

public linkedlistnodenext

public linkedlistnodeprev

}}

下面的**把linkedlist類也改為泛型類。linkedlist包含 linkedlistnode元素。linkedlist中的型別t定義了型別t的屬性first和last。addlast()方法現在接受型別t的引數,並例項化linkedlistnode型別的物件。

除了ienumerable介面,還有乙個泛型版本ienumerable。ienumerable派生自ienumerable,新增了返回ienumerable的getenumerator()方法,linkedlist實現泛型介面ienumerable。

using

system;

using

system.collections;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

public linkedlistnodelast

public linkedlistnodeaddlast(t _node)

else

return

newnode;

}public ienumeratorgetenumerator()

}ienumerator ienumerable.getenumerator()

}}

使用泛型linkedlist,可以用int型別例項化它,且無須裝箱操作。如果不使用addlist()方法傳遞int,就會出現乙個編譯錯誤。使用泛型ienumerable,foreach語句也是型別安全,如果foreach語句中的變數不是int,就會出現乙個編譯錯誤。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

foreach (string i in

m_list2)

console.readkey();}}

}

劇本第三部分

第三部分劇本 場景一 女生宿舍,a趴在桌子上睡覺,電腦螢幕亮著,是vs 但是就寫了一行 小碼趴在a的胳膊上睡著。突然,a醒了,發現自己上課要遲到了,a 哎呀,完了完了,大中午的怎麼趴在這睡著了 邊說話邊收拾書包 轉頭看向小碼 a 把你放哪呢 說話的時候四周環視 算了,跟我去吧,我先把你放書包裡 說話...

第三部分 效能

索引管理 效能優化 效能監控 db.c1.find explain 查詢的詳細資訊列出來 db.c1.getindexkyes 所有索引的字段 db.c1.getindexes 所有索引的相關資訊 2 唯一索引 只需要在ensureindex命令中提定 uniqure true 即可建立唯一索引,如...

sqlalchemy第三部分

1.復用。在我們用sqlalchemy運算元據庫時,有部分 可以重複使用,我們將這部分放到乙個模組中,後面使用就可以呼叫這個模組,匯入裡面的方法。python 1.連線資料庫 from sqlalchemy import create engine hostname 127.0.0.1 ip位址 p...