C#高级语法_泛型

泛型的定义

泛型是一种程序特性,当我们使用泛型的时候,确切说定义的时候,是对这个类型不作出明确的规定。但是当我们使用的时候,必须明确规定,并且不能改变。

自定义泛型类测试

csharp 复制代码
//自定义泛型类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class MyStack<T>
    {
        private T[] stack;
        private int size;
        private int stackPoint;

        public MyStack(int size)
        {
            this.size = size;
            stack = new T[size];
            this.stackPoint = -1;
        }

        /// <summary>
        /// 入栈
        /// </summary>
        /// <param name="item"></param>
        /// 
        public void Push(T item)
        {
            if (stackPoint >= size - 1)
            {
                Console.WriteLine("栈空间已满");
            }
            else
            {
                stackPoint++;
                stack[stackPoint] = item;
            }
        }

        public T Pop()
        {
            T temp = stack[stackPoint];
            stackPoint--;
            return temp;
        }

    }
}

//测试类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            TestMyStack();

            Console.ReadLine();
        }

        /// <summary>
        /// 测试出栈和入栈
        /// </summary>
        static void TestMyStack()
        {
            //创建泛型类的对象
            MyStack<int> stack1 = new MyStack<int>(5);
            //元素入栈
            stack1.Push(1);
            stack1.Push(2);
            stack1.Push(3);
            stack1.Push(4);
            stack1.Push(5);
            //元素出栈
            Console.WriteLine(stack1.Pop());
            Console.WriteLine(stack1.Pop());
            Console.WriteLine(stack1.Pop());
            Console.WriteLine(stack1.Pop());
            Console.WriteLine(stack1.Pop());

            MyStack<string> stack2 = new MyStack<string>(5);
            //元素入栈
            stack2.Push(".NET全栈课程25");
            stack2.Push(".NET全栈课程26");
            stack2.Push(".NET全栈课程27");
            stack2.Push(".NET全栈课程28");
            stack2.Push(".NET全栈课程29");
            //元素出栈
            Console.WriteLine(stack2.Pop());
            Console.WriteLine(stack2.Pop());
            Console.WriteLine(stack2.Pop());
            Console.WriteLine(stack2.Pop());
            Console.WriteLine(stack2.Pop()); 
        }
    }
}