泛型学习一
一个栈的示例声明一个叫做MyIntStack的类,该类实现了一个int 类型的栈,允许把int压入栈中,和弹出。
class MyIntStack //实现int类型的栈。 { int StackPoint = 0; int[] StackArry; public void Push(int x) //输入类型:int { ... } public int Pop() //返回类型:int { ... } }
类似的float类型的栈。
class MyFloatStack { int StackPointer = 0; float[] StackArray; public void Push(float x) //输入类型:float { ... } public float Pop() //返回类型:float { ... } }
这样写很麻烦容易出错。所以要用泛型,泛型是类型的模版。
C#提供了5种泛型:类,接口,结构,委托和方法。前面四个是类型,方法是成员。
创建一个泛型,步骤如下:1修改MyIntStack类的定义,把int替换为占位符T。2修改类名为MyStack。3在类名后放置string<t>。代码如下:
class MyStack { int StackPointer = 0; T[] StackArray; public void Push(T x) { ...} //输入T类型 public T Pop() { ...} //输出T类型 }
从泛型类创建实例
声明泛型类:
创建构造类型:要从泛型类构建类型,列出类名字并在尖括号中提供真实类型来代替类型参数。
类型参数与类型实参的区别:
下面是写的一个泛型的栈的实例,int和string作为类型实参。
public class MyStack<T> { T[] StackArray; int StackPointer = 0; public void Push(T x) { if (!IsStackFull) { StackArray[StackPointer++] = x; } } public T Pop() { return (!IsStackEmpty) ? StackArray[--StackPointer] : StackArray[0]; } const int MaxStack = 10; bool IsStackFull { get { return StackPointer >= MaxStack; } } bool IsStackEmpty { get { return StackPointer <= 0; } } public MyStack() { StackArray = new T[MaxStack]; } public void Print() { for (int i = StackPointer - 1; i >= 0; i--) Console.WriteLine("value:{0}", StackArray[i]); } } class Program { static void Main() { var stackInt = new MyStack<int>(); var stackString = new MyStack<string>(); stackInt.Push(3); stackInt.Push(5); stackInt.Push(7); stackInt.Print(); stackString.Push("Generics are great!"); stackString.Push("Hi there!"); stackString.Print(); } }
结果如下:
今天的博客就写到这了,明天继续。^-^
posted on 2018-03-07 23:36 work-liuwei 阅读(99) 评论(0) 编辑 收藏 举报