1>介紹泛型的優點和缺點,尤其是:
● 效能
● 型別安全性
● 二進位制**重用
● **的擴充套件
● 命名約定
2>對值型別使用非泛型集合類,在把值型別轉換為引用型別,和把引用型別轉換為值型別時,需要進行裝箱和拆箱操作。
注意:值型別儲存在堆疊上,引用型別儲存在堆上。 c#類是引用型別,結構是值型別。
從值型別轉換為引用型別稱為裝箱。如果方法需要把乙個物件作為引數,而且傳送了乙個值型別,裝箱操作就會自動進行。另一方面,裝箱的值型別可以使用拆箱操作轉換為值型別。在拆箱時,需要使用型別轉換運算子。
1,例子顯示了 system.collections 命名空間中的 arraylist 類。 arraylist 儲存物件,add()方法定義為需要把乙個物件作為引數,所以要裝箱乙個整數型別。在讀取 arraylist中的值時,要進行拆箱,把物件轉換為整數型別。可以使用型別轉換運算子把 arraylist集合的第乙個元素賦予變數 i1,在訪問 int 型別的變數 i2 的 foreach 語句中,也要使用型別
轉換運算子:
```arraylist list = new arraylist();
list.add(44);
int i1 = (int)list[0];
foreach (int i2 in list)
```system.collections.generic 命名空間中的 list>
類不使用物件,而是在使用時定義型別。在下面的例子中, list>
類的泛型型別定義為 int,所以 int 型別在 jit 編譯器動態生成的類中使用,不再進行裝箱和拆箱操作:
```listlist = new list();
list.add(44);
int i1 = list[0];
foreach (int i2 in list)
```3>命名約定
泛型型別的命名規則:
● 泛型型別的名稱用字母 t 作為字首。
● 如果沒有特殊的要求,泛型型別允許用任意類替代,且只使用了乙個泛型型別,就可以用字元 t 作為泛型型別的名稱
```public class list
public class linkedlist
```● 如果泛型型別有特定的要求(例如必須實現乙個介面或派生於基類),或者使用了兩個或多個泛型型別,就應給泛型型別使用描述性的名稱:
```public delegate void eventhandler(object sender, teventargs e);
public delegate toutput converter(tinput from);
public class sortedlist
```1)建立泛型類
在鍊錶中,乙個元素引用其後的下乙個元素。所以必須建立乙個類,將物件封裝在鍊錶中,引用下乙個物件。類 linkedlistnode 包含乙個物件 value,它用建構函式初始化,還可以用 value 屬性讀取。另外, linkedlistnode 類包含對鍊錶中下乙個元素和上乙個元素的引用,這些元素都可以從屬性中訪問.
```public class linkedlistnode
public object value
}private linkedlistnode next;
public linkedlistnode next
internal set
}private linkedlistnode prev;
public linkedlistnode prev
internal set }}
```linkedlist 類包含 linkedlistnode 型別的 first 和 last 字段,它們分別標記了鍊錶的頭尾。 addlast()方法在鍊錶尾新增乙個新元素。首先建立乙個 linkedlistnode 型別的物件。如果鍊錶是空的,則 first 和 last 欄位就設定為該新元素;否則,就把新元素新增為鍊錶中的最後乙個元素。執行 getenumerator()方法時,可以用 foreach 語句迭代鍊錶。 getenumerator()方法使用 yield 語句建立乙個列舉器型別。
4>繼承
(1)建立的 linkedlist>
類執行了 ienumerable>
介面:```
public class linkedlist: ienumerable
public class derived: base
```其要求是必須重複介面的泛型型別,或者必須指定基類的型別,如下所示:
```public class base
public class derived: base
```派生類可以是泛型類或非泛型類。例如,可以定義乙個抽象的泛型基類,它在
派生類中用乙個具體的型別實現。這允許對特定型別執行特殊的操作:
```public abstract class calc
public class ******calc : calc
public override int sub(int x, int y)
}```
5>靜態成員
(1)泛型類的靜態成員只能在類的乙個例項中共享。下面看乙個例子。 staticdemo>
類包含靜態字段 x:
```public class staticdemo
```由於對乙個 string 型別和乙個 int 型別使用了 staticdemo>
類,所以存在兩組靜態字段:
```staticdemo.x = 4;
staticdemo.x = 5;
console.writeline(staticdemo.x);
```6>泛型介面
(1)使用泛型可以定義介面,介面中的方法可以帶泛型引數。在鏈表示例中,就執行了ienumerable>
介面,它定義了 getenumerator()方法,以返回
ienumerator>
。```
public inte***ce icomparable
```第 5 章中的非泛型介面 icomparable 需要乙個物件, person 類的 compareto()方法才能按姓氏給人員排序:
```public class person : icomparable
//...
```7>泛型方法
除了定義泛型類之外,還可以定義泛型方法。在泛型方法中,泛型型別用方法宣告來定義。
swap>
方法把 t 定義為泛型型別,用於兩個引數和乙個變數 temp:
```void swap(ref t x, ref t y)
```把泛型型別賦予方法呼叫,就可以呼叫泛型方法:
```int i = 4;
int j = 5;
swap(ref i, ref j);
```泛型方法可以像非泛型方法那樣呼叫:
```int i = 4;
int j = 5;
swap(ref i, ref j);
```
第九章(筆記)
轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...
第九章作業
班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...
第九章 引用
引用擁有指標的所有功能,只是語法更加的簡單 1 引用就是別名,變數的另外乙個名字,變數和別名它們的位址是一樣的,操作別名就是操作變數 2 引用就是別名常量,一旦引用被初始化就不能再改變了 可以理解為指標常量,指向的值不能改變,能改變的只是它的該位址處的值 3 引用物件huamn mike human...