扩展方法略好于帮助方法

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

如果针对一个类型实例的代码片段经常被用到,我们可能会想到把之封装成帮助方法。如下是一段针对DateTime类型实例的一段代码:

classPRogram

{

staticvoidMain(string[] args)

{

DateTime d =newDateTime(2001,5,18);

switch(d.DayOfWeek)

{

caseDayOfWeek.Saturday:

caseDayOfWeek.Sunday:

DoWeekendThing();

break;

default:

DoWeekDayThing();

break;

}

Console.ReadKey();

}

staticvoidDoWeekendThing()

{

Console.WriteLine("周末好好休息放松心情");

}

staticvoidDoWeekDayThing()

{

Console.WriteLine("认真工作");

}

}

以上,把判断是否是周末的代码片段封装到帮助类、帮助方法中如下:

publicstaticclassDateTimeHelper

{

publicstaticboolIsWeekend(DateTime dateTime)

{

switch(dateTime.DayOfWeek)

{

caseDayOfWeek.Saturday:

caseDayOfWeek.Sunday:

returntrue;

default:

returnfalse;

}

}

}

在客户端:

classProgram

{

staticvoidMain(string[] args)

{

DateTime d =newDateTime(2001,5,18);

if(DateTimeHelper.IsWeekend(d))

{

DoWeekendThing();

}

else

{

DoWeekDayThing();

}

Console.ReadKey();

}

staticvoidDoWeekendThing()

{

Console.WriteLine("周末好好休息放松心情");

}

staticvoidDoWeekDayThing()

{

Console.WriteLine("认真工作");

}

}

用帮助类、帮助方法固然好,因为进行了很好的封装,但每次都必须要记住扩展方法在DateTimeHelper这个扩展类中。如果System.DateTime包括IsWeekend方法会更好!

扩展方法是一种特殊的静态方法,可以让编写的方法像现有类型的实例方法一样被使用。

publicstaticclassDateTimeExtensions

{

publicstaticboolIsWeekend(thisDateTime dateTime)

{

switch(dateTime.DayOfWeek)

{

caseDayOfWeek.Saturday:

caseDayOfWeek.Sunday:

returntrue;

default:

returnfalse;

}

}

}

○ 扩展方法必须在静态类中

○ 扩展方法必须是静态方法

○ 扩展方法的第一个参数必须是需要被扩展的类型,而且前面必须加this关键字

客户端修改为:

classProgram

{

staticvoidMain(string[] args)

{

DateTime d =newDateTime(2001,5,18);

if(d.IsWeekend())

{

DoWeekendThing();

}

else

{

DoWeekDayThing();

}

Console.ReadKey();

}

staticvoidDoWeekendThing()

{

Console.WriteLine("周末好好休息放松心情");

}

staticvoidDoWeekDayThing()

{

Console.WriteLine("认真工作");

}

}

总结:扩展方法貌似略好于帮助方法,可以作为类型实例的方法直接被调用。

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