泛型学习一

一个栈的示例声明一个叫做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编辑  收藏  举报

导航