首先介紹乙個一般的、非泛型的簡化鍊錶類,它可以包含任意型別的物件,以後再把這個類轉化為泛型類,以後再把這個類轉化為泛型型別。
在鍊錶中,乙個元素引用下乙個元素。所以必須建立乙個類,它將物件封裝在鍊錶中,並引用下乙個物件。類linkedlistnode包含乙個屬性value,該屬性用建構函式初始化。另外,linkedlistnode類包含對鍊錶中下乙個元素和上乙個元素的引用,這些元素都可以從屬性中訪問(**檔案linkedlistobjects/linkedlistnode.cs)。
usingsystem;
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語句建立乙個列舉器型別。
usingsystem;
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時會失敗。
usingsystem;
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。
usingsystem;
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。
usingsystem;
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,就會出現乙個編譯錯誤。
usingsystem;
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...