欢迎光临

木子屋

标题: 分享几个重载函数设计思路

作者: dnawo

日期: 2014-04-01 04:47 PM

分类: Win编程

内容: 复制内容到剪贴板 程序代码public class HttpHelper
{
public static string Get(string url, Encoding encoding)
{
string result = string.Empty;
//todo
return result;
}
}
以上面的类为例，若不考虑实用性，对url和encoding两个参数进行组合，Get方法可以有3个重载：
复制内容到剪贴板 程序代码public static string Get(string url);
public static string Get(Encoding encoding);
public static string Get(string url, Encoding encoding);
显然，Get方法url参数必不可少，第2个重载方法缺少了url则实用性不高，所以：重载函数设计要兼顾到实用性。
再来看url参数，它的值是不固定的，经常变化，每次调用Get方法时都得传入；encoding参数则不一样，它只有有限的几个值，其中UTF-8又最为常用，因而它可以赋于默认值并省略，所以：值变化大的参数在每个重载方法中应该有，值变化不大的参数可以省略（使用默认值简化输写）。
改进后的HttpHelper类：
复制内容到剪贴板 程序代码public class HttpHelper
{
/// <summary>
/// 重载1
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string Get(string url)
{
return Get(url, Encoding.UTF8);
}
/// <summary>
/// 重载2
/// </summary>
/// <param name="url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string Get(string url, Encoding encoding)
{
string result = string.Empty;
//todo
return result;
}
}
重载1中Encoding默认使用Encoding.UTF8，用户不能对它进行修改，这样对于经常抓取非utf-8页面的用户来说，TA将不得不每次都使用重载2传入Encoding，所以：省略的参数的默认值用户应该是可配置的。
再次改进后的的HttpHelper类：
复制内容到剪贴板 程序代码public class HttpHelper
{
/// <summary>
/// 默认Encoding
/// </summary>
public static Encoding DEFAULTENCODING = Encoding.UTF8;
/// <summary>
/// 重载1
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string Get(string url)
{
return Get(url, DEFAULTENCODING);
}
/// <summary>
/// 重载2
/// </summary>
/// <param name="url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string Get(string url, Encoding encoding)
{
string result = string.Empty;
//todo
return result;
}
}
或许你和我一样不太喜欢在代码中特意去设置默认值，另一种方法是将默认值保存在配置文件中：
复制内容到剪贴板 程序代码public class HttpHelper
{
/// <summary>
/// 默认Encoding
/// </summary>
private static readonly Encoding DEFAULTENCODING = Encoding.GetEncoding(ConfigurationManager.AppSettings["Encoding"] ?? "UTF-8");
/// <summary>
/// 重载1
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string Get(string url)
{
return Get(url, DEFAULTENCODING);
}
/// <summary>
/// 重载2
/// </summary>
/// <param name="url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string Get(string url, Encoding encoding)
{
string result = string.Empty;
//todo
return result;
}
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.301 ms

返回

标题: 分享几个重载函数设计思路

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.301 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.332 ms

返回