根据微软的视频教程"跟我一起学Visual Studio 2005C#语法篇"来学,因为里面有比较多的代码示例,学起来比较容易好理解
1.未使用泛型的Stack类
using System;
public class Stack
{
readonly int m_Size;
int m_StackPointer = 0;
object[] m_Items;
public Stack(): this(100)
{ }
public Stack(int size)
{
m_Size = size;
m_Items = new object[m_Size];
}
public void Push(object item)
{
if (m_StackPointer >= m_Size)
throw new StackOverflowException();
m_Items[m_StackPointer] = item;
m_StackPointer++;
}
public object Pop()
{
m_StackPointer--;
if (m_StackPointer >= 0)
{
return m_Items[m_StackPointer];
}
else
{
m_StackPointer = 0;
throw new InvalidOperationException("Cannot pop an empty stack");
}
}
}
2.使用泛型的类
using System;
public class Stack
{
readonly int m_Size;
int m_StackPointer = 0;
T[] m_Items;
public Stack()
: this(100)
{
}
public Stack(int size)
{
m_Size = size;
m_Items = new T[m_Size];
}
public void Push(T item)
{
if (m_StackPointer >= m_Size)
throw new StackOverflowException();
m_Items[m_StackPointer] = item;
m_StackPointer++;
}
public T Pop()
{
m_StackPointer--;
if (m_StackPointer >= 0)
{
return m_Items[m_StackPointer];
}
else
{
m_StackPointer = 0;
//throw new InvalidOperationException("Cannot pop an empty stack");
return default(T);
}
}
}
public class Stack1
{
}
下为PDF文档,我感觉挺好的,很简单,我听的懂就是好的
/Clingingboy/one.pdf
多个泛型
class Node
{
public K Key;
public T Item;
public Node
public Node()
{
Key = default(K);
Item = default(T);
NextNode = null;
}
public Node(K key, T item, Node
{
Key = key;
Item = item;
NextNode = nextNode;
}
}
反省泛型别名
LinkedList
泛型约束
public class LinkedList
{
Node
public LinkedList()
{
m_Head = new Node
}
public void AddHead(K key, T item)
{
Node
m_Head.NextNode = newNode;
}
T Find(K key)
{
Node
while (current.NextNode != null)
{
if (current.Key.CompareTo(key) == 0)
break;
else
current = current.NextNode;
}
return current.Item;
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace VS2005Demo1
{
public class MyBaseClassGeneric // sealed,static
{
}
interface IMyBaseInterface
{
void A();
}
internal class GenericClass
{
}
class GClass
{
}
class GUClass
{
GClass
}
不能将引用/值类型约束与基类约束一起使用,因为基类约束涉及到类#region 不能将引用/值类型约束与基类约束一起使用,因为基类约束涉及到类
//class A
//{}
#endregion
不能使用结构和默认构造函数约束,因为默认构造函数约束也涉及到类#region 不能使用结构和默认构造函数约束,因为默认构造函数约束也涉及到类
//class A
//{}
#endregion
虽然您可以使用类和默认构造函数约束,但这样做没有任何价值#region 虽然您可以使用类和默认构造函数约束,但这样做没有任何价值
class A
{
T obj = new T();
}
class TypeA
{
public TypeA() { }
}
class TestA
{
A
}
#endregion
可以将引用/值类型约束与接口约束组合起来,前提是引用/值类型约束出现在约束列表的开头#region 可以将引用/值类型约束与接口约束组合起来,前提是引用/值类型约束出现在约束列表的开头
class SClass
{ }
class CClass
{ }
#endregion
}