泛型類:
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("---------------------------");
}
}
}
執行結果:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLypkMaVnVXJmb1cVWwhnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2MTO0UTNxYTM3ADMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
上面執行個體模拟資料入棧的操作。使用泛型可以讓不同類型的資料公用一個類處理。實作代碼的複用。
泛型方法:
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