初學C#,整天對著業務邏輯,寫反反覆復的“過程型”代碼邏輯十分枯燥,不如用點新東西提升一下代碼效率,讓代碼看起來更有逼格?! 好,下麵我們看看C#中簡單易學的泛型。 首先,我寫了一個這樣的方法 Say(string spk),併在主函數中進行調用: 如果,我說:123,則需要另一個方法 Say(in ...
初學C#,整天對著業務邏輯,寫反反覆復的“過程型”代碼邏輯十分枯燥,不如用點新東西提升一下代碼效率,讓代碼看起來更有逼格?!
好,下麵我們看看C#中簡單易學的泛型。
首先,我寫了一個這樣的方法 ---- Say(string spk),併在主函數中進行調用:
1 namespace TestCode 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Say("我餓了!"); 8 } 9 10 public static void Say(string spk) 11 { 12 Console.WriteLine("我說:" + spk); 13 } 14 } 15 }
如果,我說:123,則需要另一個方法 ---- Say(int spk),併在主函數中進行調用:
1 namespace TestCode 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Say("我餓了!"); 8 Say(123); 9 } 10 11 public static void Say(string spk) 12 { 13 Console.WriteLine("我說:" + spk); 14 } 15 16 public static void Say(int spk) 17 { 18 Console.WriteLine("我說:" + spk); 19 } 20 } 21 }
這樣便完成了我的需求。你會發現,兩個方法除了“形參”數據類型不同外,其他都一個樣,這就是方法的“重載”。
好了,回歸正題。愛動腦子的你,到這裡,肯定會想:不就是數據類型不同嘛,幹嘛寫兩遍基本一模一樣的方法呢?真TM費事,怎麼合成一個呢?
好在,微軟已經幫你先前一步實現了你這個需求,這就是“泛型”(Generices),我自己理解就是:“涵蓋了廣泛(所有)的數據類型”。
這樣,我把代碼改成:
1 namespace TestCode 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Say<string>("我餓了!"); 8 Say<int>(123); 9 } 10 11 public static void Say<T>(T spk) 12 { 13 Console.WriteLine("我說:" + spk); 14 } 15 } 16 }
完成,這就是“泛型”,基本格式就這樣,比對著看一下,聰明的你很快就能看懂了,思想就是:可以接受任何數據類型的“實參”,我調用方法時再告訴電腦 -----“我要表達的內容,其數據類型是什麼”。
若有返回類型,那把void改為T。用T作為數據類型去定義變數。
當你熟悉了泛型的基本用法,你就可以去嘗試更多的地方去使用泛型!
獻給我的第一次: 初寫博客,會有許許多多瑕疵,希望廣大園友能夠為我指出,不吝賜教!我喜歡的表達的風格是極為通俗,形象且順應思路走向,用最簡單、直白的方式解決“看似”最複雜的問題。