本文有稍微修改成自己看得懂的版本
Q:何謂泛型(Generics)?
A:在定義泛型類別時 不指定某些變數的具體類型
而是用一個類型參數代替,在使用這個類別時
這個類型的參數會由,一個具體的類型所代替
比較下面兩個例子。
範例一泛型是string
namespace TestGenerics {
class Program {
static void Main(string[] args)
{ //Record<string> 此時泛型類別中的T=string
Record<string> score1 = new Record<string>("Alex", "A");
Console.WriteLine("Alex " + score1.Getgrade());
Console.ReadKey();
}
}//定義公開 泛行類別Record<T> T是尚未指定的類型
public class Record<T>
{
private string _name;
private T _grade;//T的類型還沒定義 但是定義後可以宣告物件
public Record(string name, T grade)//想像T是一個類型比如是string
{
this._name = name;
this._grade = grade;
}
public T Getgrade()//用泛型也可指定回傳的類型
{
return this._grade;
}
}
}
範例二 泛型變成int了
namespace TestGenerics {
class Program {
static void Main(string[] args) {
Record<int> score1 = new Record<int>("Alex", 80);
Console.WriteLine("Alex " + score1.Getgrade());
Console.ReadKey();
}
}
public class Record<T> {
private string _name;
private T _grade;
public Record(string name, T grade) {
this._name = name;
this._grade = grade;
}
public T Getgrade() {
return this._grade;
}
}
}
範例三
泛型類別可以支援一個以上的泛型變數,兩者型態一致。
public class Record<T> {
private string _name;
private T _math;
private T _phy;
public Record(string name,T math,T phy{
this._name = name;
this._math = math;
this._phy = phy;
}
public T GetMath(){
return this._math
}
public T GetPhy(){
return this._phy;
}
}
範例四
兩者型態也可不一致,就要宣告兩個型態的關鍵字。
public class Record<S, T>{
private string _name;
private T _math;
private S _phy;
public Record(String name, S phy, T math) {
this._name = name;
this._math = math;
this._phy = phy;
}
public T GetMath() {
return this._math;
}
public S GetPhy()
{
return this._phy;
}
}
若要在 Method 達到泛型的效果,又該如何做呢?參考以下:
class Program {
static void Main(string[] args) {
Console.WriteLine(Show<string>("Hello!"));
Console.ReadKey();
}
static T Show<T>(T t) {
T Result = t;
return Result;
}
}
泛型變成int code 如下
class Program {
static void Main(string[] args) {
Console.WriteLine(Show<int>(9999));
Console.ReadKey();
}
static T Show<T>(T t) {
T Result = t;
return Result;
}
}
沒有留言:
張貼留言