泛型类:
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