C# 泛型約束,泛型函式
class 泛型
{
public static void Main()
{
//---------------測試泛型約束-------
//定義一個Pression陣列
Pression[] pr = new Pression[] { new Pression("蚊子",12),
new Pression("棟凍", 10), new Pression("高高", 20)};
sort<Pression> ss = new sort<Pression>();//例項化一個排序類
ss.sortt(pr);//呼叫排序函式
foreach (Pression ppr in pr)
{//打印出排序後的序列
Console.WriteLine(ppr.ToString());
}
//----------測試泛型函式---------
int a = 5;
Console.WriteLine("a -->" + a);
int b = 9;
Console.WriteLine("b -->" + b + "/n");
pr[0].Swap<int>(ref a, ref b);
Console.WriteLine("a-->" + a);
Console.WriteLine("b-->" + b);
Console.Read();
}
}
//先來比較一下 一個類,實現了比較介面,這個類有兩個欄位
class Pression : IComparable<Pression>
{
//這裡是泛型函式 交換x 和y
public void Swap<T>(ref T x, ref T y)
{
T tem;
tem = x;
x = y;
y = tem;
}
//--------------屬性方法、建構函式---------------
private int year;
private string name;
public int Year
{
get { return year; }
set { year = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public Pression(string _name, int _year)
{
this.Name = _name;
this.Year = _year;
}
public Pression() { }
//-------------------------------------
//------------實現比較的介面----------
#region IComparable<Pression> 成員
int IComparable<Pression>.CompareTo(Pression other)
{
return this.Year.CompareTo(other.Year);
}
#endregion
//----------重寫了ToString方法---------
public override string ToString()
{
return "姓名:" + this.Name +
"*********年齡:" + this.Year;
}
}
//----排序的類,要求要排序的物件實現了比較的介面----
class sort<T> where T : IComparable<T>
{
public void sortt(T []t)
{//這裡是一個氣泡排序法
for (int i = 0; i < t.Length-1; i++)
for (int j = i+1; j < t.Length; j++)
{
if (t[i].CompareTo(t[j]) == 1)
{
T tt = t[i];
t[i] = t[j];
t[j] = tt;
}
}
}
}