博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
架构,改善程序复用性的设计~第四讲 方法的重载真的用不到吗?
阅读量:5914 次
发布时间:2019-06-19

本文共 4520 字,大约阅读时间需要 15 分钟。

,从方法重构到类重构再到项目重构,这是一个过程,一种思想上的升华,今天将继续我们“程序复用性设计”的旅程,说一下方法重载的重要性。

细心的朋友一定会非常关注net frameworks的源代码,即使只能看到它内部方法的定义,也足够了,在System.Web.Mvc这个命名空间下定义了很多关于MVC架构的东西,我们就以它为例来说一下方法重载吧!

重载的好处:

1 对方法调用的程序员来说,它是友好的(程序员只关心自己调用的方法签名即可,不用管参数为NULL怎么办这些逻辑)

2 对于代码维护量来说,它是容易的(核心代码只放在参数签名最多的方法中)

3 对于代码扩展来说,它是直接的(只要修改核心方法代码即可,而不用一个方法一个方法的去COPY)

以下是InputExtensions类下的几个方法:

1        public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name) 2         { 3             return htmlHelper.CheckBox(name, null); 4         } 5          6         public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name, bool isChecked) 7         { 8             return htmlHelper.CheckBox(name, isChecked, null); 9         }10         11         public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name, IDictionary
htmlAttributes)12 {13 return CheckBoxHelper(htmlHelper, null, name, null, htmlAttributes);14 }15 16 public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name, object htmlAttributes)17 {18 return htmlHelper.CheckBox(name, ((IDictionary
) HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)));19 }20 21 public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name, bool isChecked, IDictionary
htmlAttributes)22 {23 return CheckBoxHelper(htmlHelper, null, name, new bool?(isChecked), htmlAttributes);24 }25 26 public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name, bool isChecked, object htmlAttributes)27 {28 return htmlHelper.CheckBox(name, isChecked, ((IDictionary
) HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)));29 }30

我们看到这是一个在视图上建立复选框的方法,也是HtmlHelper类型的,(即通过HtmlHelper的实例对象直接可以访问到这个方法),它提供了六个方法重载,程序员在使用时根据业务需求去调用,而在参数最少的方法中,直接为参数赋一个默认值即可。

我的项目中的方法重载:

以下是一个通过状态枚举类型,产生一个下拉列表框的扩展方法,它有两个重载方法,第一个是产生下拉列表 (public static MvcHtmlString StatusForSelectList(this HtmlHelper html)),第二个是在产生下拉列表时,给它设一个默认值( public static MvcHtmlString StatusForSelectList(this HtmlHelper html, int selectedValue)),这时使用方法重载就更友好,而另一种作法就是直接用一个方法代替,这对于调用方的程序员来说是不友好的。

下面是两个方式的实现:

不友好的方式:

1         ///  2         /// 状态字段下列列表框,要求调用方的程序员为它传送一个默认值,如0,即使写成int? selectValue,也会使程序员产生歧义 3         ///  4         ///  5         /// 选中的项 6         /// 
7 public static MvcHtmlString StatusForSelectList(this HtmlHelper html, int selectedValue) 8 { 9 StringBuilder sb = new StringBuilder();10 sb.Append("");21 return MvcHtmlString.Create(sb.ToString());22 }

下面这种方式是我们提倡的,也是微软主推的:

1         ///  2         /// 状态字段下列列表框 3         ///  4         ///  5         /// 选中的项 6         /// 
7 public static MvcHtmlString StatusForSelectList(this HtmlHelper html, int selectedValue) 8 { 9 StringBuilder sb = new StringBuilder();10 sb.Append("");21 return MvcHtmlString.Create(sb.ToString());22 }23 24 /// 25 /// 状态字段下列列表框26 /// 27 /// 28 ///
29 public static MvcHtmlString StatusForSelectList(this HtmlHelper html)30 {31 return StatusForSelectList(html, 100);32 }

这使得代码很清晰,职责分明!

转载于:https://www.cnblogs.com/lori/archive/2012/05/31/2528058.html

你可能感兴趣的文章
第38周星期五小结
查看>>
最近新出的C++右值引用的意思
查看>>
Plus One @LeetCode
查看>>
jquery奇怪的问题
查看>>
294. Flip Game II
查看>>
使用EasyUI实现加入和删除功能
查看>>
当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?
查看>>
Service代码示例
查看>>
转载:知其所以然(以算法学习为例) 作者: 刘未鹏
查看>>
新浪微博客户端(11)-自定义checkBox
查看>>
部署一个简单的生信分析流程
查看>>
详解UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)
查看>>
Java源码阅读的真实体会(一种学习思路)
查看>>
Linux系统编译boa-0.94-13出错信息问题
查看>>
遇到一个好站点:PInvoke for DotNet
查看>>
海量数据等概率选取问题
查看>>
ASP.NET获取MS SQL Server安装实例
查看>>
hdu 4741 Save Labman No.004 [2013年杭州ACM网络赛]
查看>>
php-cli模式学习(PHP命令行模式)(转)
查看>>
sql server 2005 外围应用配置器
查看>>