1.未使用泛型的Stack类
1
using System;
2![](/Images/OutliningIndicators/None.gif)
3
public class Stack
4
{
5
readonly int m_Size;
6
int m_StackPointer = 0;
7
object[] m_Items;
8
public Stack(): this(100)
9
{ }
10
public Stack(int size)
11
{
12
m_Size = size;
13
m_Items = new object[m_Size];
14
}
15
public void Push(object item)
16
{
17
if (m_StackPointer >= m_Size)
18
throw new StackOverflowException();
19![](/Images/OutliningIndicators/InBlock.gif)
20
m_Items[m_StackPointer] = item;
21
m_StackPointer++;
22
}
23
public object Pop()
24
{
25
m_StackPointer--;
26
if (m_StackPointer >= 0)
27
{
28
return m_Items[m_StackPointer];
29
}
30
else
31
{
32
m_StackPointer = 0;
33
throw new InvalidOperationException("Cannot pop an empty stack");
34
}
35
}
36
}
37![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
36
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
37
![](/Images/OutliningIndicators/None.gif)
2.使用泛型的类
1
using System;
2![](/Images/OutliningIndicators/None.gif)
3
public class Stack<T>
4
{
5
readonly int m_Size;
6
int m_StackPointer = 0;
7
T[] m_Items;
8
public Stack()
9
: this(100)
10
{
11
}
12
public Stack(int size)
13
{
14
m_Size = size;
15
m_Items = new T[m_Size];
16
}
17
public void Push(T item)
18
{
19
if (m_StackPointer >= m_Size)
20
throw new StackOverflowException();
21![](/Images/OutliningIndicators/InBlock.gif)
22
m_Items[m_StackPointer] = item;
23
m_StackPointer++;
24
}
25
public T Pop()
26
{
27
m_StackPointer--;
28
if (m_StackPointer >= 0)
29
{
30
return m_Items[m_StackPointer];
31
}
32
else
33
{
34
m_StackPointer = 0;
35
//throw new InvalidOperationException("Cannot pop an empty stack");
36
return default(T);
37
}
38
}
39
}
40![](/Images/OutliningIndicators/None.gif)
41
public class Stack1<T> : Stack<T>
42
{
43![](/Images/OutliningIndicators/InBlock.gif)
44
}
45![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
40
![](/Images/OutliningIndicators/None.gif)
41
![](/Images/OutliningIndicators/None.gif)
42
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
45
![](/Images/OutliningIndicators/None.gif)
下为PDF文档,我感觉挺好的,很简单,我听的懂就是好的
/Clingingboy/one.pdf
多个泛型
1
class Node<K, T>
2
{
3
public K Key;
4
public T Item;
5
public Node<K, T> NextNode;
6
public Node()
7
{
8
Key = default(K);
9
Item = default(T);
10
NextNode = null;
11
}
12
public Node(K key, T item, Node<K, T> nextNode)
13
{
14
Key = key;
15
Item = item;
16
NextNode = nextNode;
17
}
18
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
泛型别名
1
using list = LinkedList<int, string>;
![](/Images/OutliningIndicators/None.gif)
泛型约束
1
public class LinkedList<K, T> where K : IComparable
2
{
3
Node<K, T> m_Head;
4
public LinkedList()
5
{
6
m_Head = new Node<K, T>();
7
}
8
public void AddHead(K key, T item)
9
{
10
Node<K, T> newNode = new Node<K, T>(key, item, m_Head.NextNode);
11
m_Head.NextNode = newNode;
12
}
13![](/Images/OutliningIndicators/InBlock.gif)
14
T Find(K key)
15
{
16
Node<K, T> current = m_Head;
17
while (current.NextNode != null)
18
{
19
if (current.Key.CompareTo(key) == 0)
20
break;
21
else
22
current = current.NextNode;
23
}
24
return current.Item;
25
}
26![](/Images/OutliningIndicators/InBlock.gif)
27
}
28![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
28
![](/Images/OutliningIndicators/None.gif)
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4![](/Images/OutliningIndicators/None.gif)
5
namespace VS2005Demo1
6
{
7
public class MyBaseClassGeneric // sealed,static
8
{
9
}
10![](/Images/OutliningIndicators/InBlock.gif)
11
interface IMyBaseInterface
12
{
13
void A();
14
}
15![](/Images/OutliningIndicators/InBlock.gif)
16
internal class GenericClass<T> where T : MyBaseClassGeneric,IMyBaseInterface
17
{
18
19
}
20![](/Images/OutliningIndicators/InBlock.gif)
21
class GClass<K, T> where K : MyBaseClassGeneric,IMyBaseInterface,new() where T : K
22
{
23
24
}
25![](/Images/OutliningIndicators/InBlock.gif)
26
class GUClass<K, T> where T : K where K : MyBaseClassGeneric,IMyBaseInterface, new()
27
{
28
GClass<K, T> obj = new GClass<K, T>();
29
}
30![](/Images/OutliningIndicators/InBlock.gif)
31![](/Images/OutliningIndicators/InBlock.gif)
32
不能将引用/值类型约束与基类约束一起使用,因为基类约束涉及到类
38![](/Images/OutliningIndicators/InBlock.gif)
39
不能使用结构和默认构造函数约束,因为默认构造函数约束也涉及到类
45![](/Images/OutliningIndicators/InBlock.gif)
46
虽然您可以使用类和默认构造函数约束,但这样做没有任何价值
64![](/Images/OutliningIndicators/InBlock.gif)
65
可以将引用/值类型约束与接口约束组合起来,前提是引用/值类型约束出现在约束列表的开头
74
}
75![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
74
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
75
![](/Images/OutliningIndicators/None.gif)
记录一下示例代码