Jeffrey Zhao真是神一樣的存在,伊太結棍了(上海話),每次看他的博客得使勁使勁使勁地啃。本篇源于Jeffery Zhao的"逆泛型執行器"這篇文章。該文提到了為以下的接口寫一個泛型方法:
public interface IRecord{string GetString(string field);int GetInt(string field);long GetLong(string field);}
先來實現該接口:
public class MyRecord : IRecord{public string GetString(string field){return field + "--added string";}public int GetInt(string field){return int.Parse(field + "1");}public long GetLong(string field){return long.Parse(field);}}
通常,在客戶端這樣調用:
static void Main(string[] args){MyRecord myRecord = new MyRecord();Console.WriteLine(myRecord.GetString("hello"));Console.WriteLine(myRecord.GetInt("1"));Console.WriteLine(myRecord.GetLong("2"));Console.ReadKey();}
以上,對于IRecord接口的各個方法而言,它們處在同一個接口,有相同的方法參數,唯一不同的是返回類型,看來有必要請出泛型了。
對于接口方法來說,接口就是它們的"天",它們得"一輩子"待在這里。而對于泛型而言,它以更高的視角來俯視接口和它的方法們。
可能,我們需要這樣一個針對IRecord接口的泛型方法:SomeExtenion.Get<T>(IRecord record, string str)。
這里的T是什么,返回類型就是什么, 如果T是string類型,那就返回string類型,等等。輸入參數就IRecord是接口和string類型。
如何做呢?
有這樣的一個類的輪廓模模糊糊地出現在了腦海里:
public static class RecordExtensions{public static T Get<T>(IRecord record, string field){<PRe style="font-size: 10px; font-family: consolas,'Courier New',courier,mono
新聞熱點
疑難解答