泛型类:
using System; namespace ThreadDemo { class Program { static void Main(string[] args) { MyStack<int> myStack = new MyStack<int>(3); myStack.Push(1); myStack.Push(2); myStack.Push(3); myStack.Push(4); MyStack<string> myStack1 = new MyStack<string>(5); myStack1.Push("张三"); } } public class MyStack<T> { private T[] _stack;//栈数组 private int _stackPoint;//当前位置 private int _size;//栈的容量 /// <summary> /// 初始化 /// </summary> public MyStack(int size) { _size = size; _stack = new T[size]; _stackPoint = 0; } /// <summary> /// 入栈方法 /// </summary> /// <param name="item"></param> public void Push(T item) { if (_stackPoint >= _size) { Console.WriteLine("栈已满,无法继续入栈"); } else { _stack[_stackPoint] = item; _stackPoint++; } foreach (var s in _stack) { Console.WriteLine(s); } Console.WriteLine("---------------------------"); } } }执行结果:
上面实例模拟数据入栈的操作。使用泛型可以让不同类型的数据公用一个类处理。实现代码的复用。
泛型方法:
using System; namespace ThreadDemo { class Program { /// <summary> /// 两个参数交换值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="left"></param> /// <param name="right"></param> static void Swip<T>(ref T left, ref T right) { T temp; temp = left; left = right; right = temp; } static void Main(string[] args) { int a = 1; int b = 2; Swip<int>(ref a, ref b); string s1 = "张三"; string s2 = "李四"; Swip<string>(ref s1, ref s2); Console.WriteLine("a={0},b={1}", a, b); Console.WriteLine("s1={0},s2={1}", s1, s2); } } }执行结果:
可以看到a,b s1,s2 的值都进行了交换。
这里的泛型方法就起到了可以为不同类型的数据进行数值交换,而不需要对各种类型单独定义方法。
这里用到了ref关键字,可以参考https://blog.csdn.net/m0_37679113/article/details/83045813