2018年7月27日 星期五

C# 泛型(Generics) - 教學筆記 (使用visual studio)

C# 泛型(Generics) - 教學筆記 (使用visual studio)

https://adon988.logdown.com/posts/1203957


C# 提供了泛型,讓我們可以用更有彈性的方式來設計Class、Method,操作資料
透過泛型類型 <型別參數T>來代表型別(int, string, double...)
可以在宣告時再指定型別,
以下透過範例來說明幾種情況的用法:

方法泛型 (Generic Method)

在Method使用泛型,只要在Method後面接上泛型類型 <型別參數T>
就可以在宣告時,再指定型別,
並且,可以搭配.GetType()來檢查型別
範例:
static void MyDemo<T>(T x)
{
    Console.WriteLine("您傳入的型別為"+x.GetType()+ ",值=" + x);
}

static void Main(string[] args)
{
    MyDemo<string>("Hello");//您傳入的型別為System.String,值=Hello
    MyDemo<int>(3);//您傳入的型別為System.Int32,值=3
    MyDemo<double>(3.14);//您傳入的型別為System.Double,值=3.14
}

類別泛型(Generics Class)

在class使用泛型,一樣直接加上 <型別參數T> 即可
在這裡示範如何透過Class泛型來手動做一個簡易的list功能
範例:
// Declare the generic class.
public class MyListClass<T>
{
    //初始化array,並參考泛型別
    T[] innerArray = new T[0];
    
    //Add Method - 新增一個array項目
    public void Add(T item)
    {
        Array.Resize(ref innerArray, innerArray.Length + 1);
        innerArray[innerArray.Length - 1] = item;
    }
    
    //Get Method - 取得array特定key的value
    public T Get(int k) {
        return innerArray[k];
    }
    //All Method - return array
    public T[] All()
    {
        return innerArray;
    }
}

static void Main(string[] args)
{
    // Declare a list of type int.
    MyListClass<int> listA = new MyListClass<int>();
    listA.Add(3);
    listA.Add(4);
    listA.Add(5);
    listA.Add(2);
    foreach (int row in listA.All()) {
        Console.WriteLine(row);
    }
}

沒有留言:

張貼留言