c#2.0泛型学习(一)

时间:2022-12-26 05:43:38
     根据微软的视频教程"跟我一起学Visual Studio 2005C#语法篇"来学,因为里面有比较多的代码示例,学起来比较容易好理解

1.未使用泛型的Stack类

 1 c#2.0泛型学习(一)using  System;
 2 c#2.0泛型学习(一)
 3 c#2.0泛型学习(一) public   class  Stack
 4 c#2.0泛型学习(一)c#2.0泛型学习(一) {
 5c#2.0泛型学习(一)    readonly int m_Size;
 6c#2.0泛型学习(一)    int m_StackPointer = 0;
 7c#2.0泛型学习(一)    object[] m_Items;
 8c#2.0泛型学习(一)    public Stack(): this(100)
 9c#2.0泛型学习(一)c#2.0泛型学习(一)    { }
10c#2.0泛型学习(一)    public Stack(int size)
11c#2.0泛型学习(一)c#2.0泛型学习(一)    {
12c#2.0泛型学习(一)        m_Size = size;
13c#2.0泛型学习(一)        m_Items = new object[m_Size];
14c#2.0泛型学习(一)    }

15c#2.0泛型学习(一)    public void Push(object item)
16c#2.0泛型学习(一)c#2.0泛型学习(一)    {
17c#2.0泛型学习(一)        if (m_StackPointer >= m_Size)
18c#2.0泛型学习(一)            throw new *Exception();
19c#2.0泛型学习(一)
20c#2.0泛型学习(一)        m_Items[m_StackPointer] = item;
21c#2.0泛型学习(一)        m_StackPointer++;
22c#2.0泛型学习(一)    }

23c#2.0泛型学习(一)    public object Pop()
24c#2.0泛型学习(一)c#2.0泛型学习(一)    {
25c#2.0泛型学习(一)        m_StackPointer--;
26c#2.0泛型学习(一)        if (m_StackPointer >= 0)
27c#2.0泛型学习(一)c#2.0泛型学习(一)        {
28c#2.0泛型学习(一)            return m_Items[m_StackPointer];
29c#2.0泛型学习(一)        }

30c#2.0泛型学习(一)        else
31c#2.0泛型学习(一)c#2.0泛型学习(一)        {
32c#2.0泛型学习(一)            m_StackPointer = 0;
33c#2.0泛型学习(一)            throw new InvalidOperationException("Cannot pop an empty stack");
34c#2.0泛型学习(一)        }

35c#2.0泛型学习(一)    }

36c#2.0泛型学习(一)}

37 c#2.0泛型学习(一)

2.使用泛型的类


 1 c#2.0泛型学习(一)using  System;
 2 c#2.0泛型学习(一)
 3 c#2.0泛型学习(一) public   class  Stack < T >
 4 c#2.0泛型学习(一)c#2.0泛型学习(一) {
 5c#2.0泛型学习(一)    readonly int m_Size;
 6c#2.0泛型学习(一)    int m_StackPointer = 0;
 7c#2.0泛型学习(一)    T[] m_Items;
 8c#2.0泛型学习(一)    public Stack()
 9c#2.0泛型学习(一)        : this(100)
10c#2.0泛型学习(一)c#2.0泛型学习(一)    {
11c#2.0泛型学习(一)    }

12c#2.0泛型学习(一)    public Stack(int size)
13c#2.0泛型学习(一)c#2.0泛型学习(一)    {
14c#2.0泛型学习(一)        m_Size = size;
15c#2.0泛型学习(一)        m_Items = new T[m_Size];
16c#2.0泛型学习(一)    }

17c#2.0泛型学习(一)    public void Push(T item)
18c#2.0泛型学习(一)c#2.0泛型学习(一)    {
19c#2.0泛型学习(一)        if (m_StackPointer >= m_Size)
20c#2.0泛型学习(一)            throw new *Exception();
21c#2.0泛型学习(一)
22c#2.0泛型学习(一)        m_Items[m_StackPointer] = item;
23c#2.0泛型学习(一)        m_StackPointer++;
24c#2.0泛型学习(一)    }

25c#2.0泛型学习(一)    public T Pop()
26c#2.0泛型学习(一)c#2.0泛型学习(一)    {
27c#2.0泛型学习(一)        m_StackPointer--;
28c#2.0泛型学习(一)        if (m_StackPointer >= 0)
29c#2.0泛型学习(一)c#2.0泛型学习(一)        {
30c#2.0泛型学习(一)            return m_Items[m_StackPointer];
31c#2.0泛型学习(一)        }

32c#2.0泛型学习(一)        else
33c#2.0泛型学习(一)c#2.0泛型学习(一)        {
34c#2.0泛型学习(一)            m_StackPointer = 0;
35c#2.0泛型学习(一)            //throw new InvalidOperationException("Cannot pop an empty stack");
36c#2.0泛型学习(一)            return default(T);
37c#2.0泛型学习(一)        }

38c#2.0泛型学习(一)    }

39c#2.0泛型学习(一)}

40 c#2.0泛型学习(一)
41 c#2.0泛型学习(一) public   class  Stack1 < T >  : Stack < T >
42 c#2.0泛型学习(一)c#2.0泛型学习(一)
43c#2.0泛型学习(一)
44c#2.0泛型学习(一)}

45 c#2.0泛型学习(一)

下为PDF文档,我感觉挺好的,很简单,我听的懂就是好的
/Clingingboy/one.pdf

多个泛型
 1 c#2.0泛型学习(一)class  Node < K, T >
 2 c#2.0泛型学习(一)c#2.0泛型学习(一) {
 3c#2.0泛型学习(一)    public K Key;
 4c#2.0泛型学习(一)    public T Item;
 5c#2.0泛型学习(一)    public Node<K, T> NextNode;
 6c#2.0泛型学习(一)    public Node()
 7c#2.0泛型学习(一)c#2.0泛型学习(一)    {
 8c#2.0泛型学习(一)        Key = default(K);
 9c#2.0泛型学习(一)        Item = default(T);
10c#2.0泛型学习(一)        NextNode = null;
11c#2.0泛型学习(一)    }

12c#2.0泛型学习(一)    public Node(K key, T item, Node<K, T> nextNode)
13c#2.0泛型学习(一)c#2.0泛型学习(一)    {
14c#2.0泛型学习(一)        Key = key;
15c#2.0泛型学习(一)        Item = item;
16c#2.0泛型学习(一)        NextNode = nextNode;
17c#2.0泛型学习(一)    }

18c#2.0泛型学习(一)}

泛型别名

1 c#2.0泛型学习(一)using  list  =  LinkedList < int string > ;

泛型约束

 1 c#2.0泛型学习(一)public   class  LinkedList < K, T >  where K : IComparable
 2 c#2.0泛型学习(一)c#2.0泛型学习(一) {
 3c#2.0泛型学习(一)    Node<K, T> m_Head;
 4c#2.0泛型学习(一)    public LinkedList()
 5c#2.0泛型学习(一)c#2.0泛型学习(一)    {
 6c#2.0泛型学习(一)        m_Head = new Node<K, T>();
 7c#2.0泛型学习(一)    }

 8c#2.0泛型学习(一)    public void AddHead(K key, T item)
 9c#2.0泛型学习(一)c#2.0泛型学习(一)    {
10c#2.0泛型学习(一)        Node<K, T> newNode = new Node<K, T>(key, item, m_Head.NextNode);
11c#2.0泛型学习(一)        m_Head.NextNode = newNode;
12c#2.0泛型学习(一)    }

13c#2.0泛型学习(一)
14c#2.0泛型学习(一)    T Find(K key)
15c#2.0泛型学习(一)c#2.0泛型学习(一)    {
16c#2.0泛型学习(一)        Node<K, T> current = m_Head;
17c#2.0泛型学习(一)        while (current.NextNode != null)
18c#2.0泛型学习(一)c#2.0泛型学习(一)        {
19c#2.0泛型学习(一)            if (current.Key.CompareTo(key) == 0)
20c#2.0泛型学习(一)                break;
21c#2.0泛型学习(一)            else
22c#2.0泛型学习(一)                current = current.NextNode;
23c#2.0泛型学习(一)        }

24c#2.0泛型学习(一)        return current.Item;
25c#2.0泛型学习(一)    }

26c#2.0泛型学习(一)
27c#2.0泛型学习(一)}

28 c#2.0泛型学习(一)


 1 c#2.0泛型学习(一)using  System;
 2 c#2.0泛型学习(一) using  System.Collections.Generic;
 3 c#2.0泛型学习(一) using  System.Text;
 4 c#2.0泛型学习(一)
 5 c#2.0泛型学习(一) namespace  VS2005Demo1
 6 c#2.0泛型学习(一)c#2.0泛型学习(一) {
 7c#2.0泛型学习(一)    public class MyBaseClassGeneric // sealed,static
 8c#2.0泛型学习(一)c#2.0泛型学习(一)    {
 9c#2.0泛型学习(一)    }

10c#2.0泛型学习(一)
11c#2.0泛型学习(一)    interface IMyBaseInterface
12c#2.0泛型学习(一)c#2.0泛型学习(一)    {
13c#2.0泛型学习(一)        void A();
14c#2.0泛型学习(一)    }

15c#2.0泛型学习(一)
16c#2.0泛型学习(一)    internal class GenericClass<T> where T : MyBaseClassGeneric,IMyBaseInterface
17c#2.0泛型学习(一)c#2.0泛型学习(一)    
18c#2.0泛型学习(一)    
19c#2.0泛型学习(一)    }

20c#2.0泛型学习(一)
21c#2.0泛型学习(一)    class GClass<K, T> where K : MyBaseClassGeneric,IMyBaseInterface,new() where T : K
22c#2.0泛型学习(一)c#2.0泛型学习(一)    
23c#2.0泛型学习(一)    
24c#2.0泛型学习(一)    }

25c#2.0泛型学习(一)
26c#2.0泛型学习(一)    class GUClass<K, T> where T : K where K : MyBaseClassGeneric,IMyBaseInterface, new()
27c#2.0泛型学习(一)c#2.0泛型学习(一)    {
28c#2.0泛型学习(一)        GClass<K, T> obj = new GClass<K, T>();
29c#2.0泛型学习(一)    }

30c#2.0泛型学习(一)
31c#2.0泛型学习(一)
32c#2.0泛型学习(一)c#2.0泛型学习(一)    不能将引用/值类型约束与基类约束一起使用,因为基类约束涉及到类
38c#2.0泛型学习(一)
39c#2.0泛型学习(一)c#2.0泛型学习(一)    不能使用结构和默认构造函数约束,因为默认构造函数约束也涉及到类
45c#2.0泛型学习(一)
46c#2.0泛型学习(一)c#2.0泛型学习(一)    虽然您可以使用类和默认构造函数约束,但这样做没有任何价值
64c#2.0泛型学习(一)
65c#2.0泛型学习(一)c#2.0泛型学习(一)    可以将引用/值类型约束与接口约束组合起来,前提是引用/值类型约束出现在约束列表的开头
74c#2.0泛型学习(一)}

75 c#2.0泛型学习(一)


记录一下示例代码