为参数类型一样返回类型不同的接口写一个泛型方法

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

为参数类型一样返回类型不同的接口写一个泛型方法

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航