具体用法如下:

  1. public static class ClassHelper
  2. {
  3. //用this 声明将要吧这个方法附加到Student对象
  4. public static bool CheckName(this Student stu)
  5. {
  6. if (stu.Name == "小明")
  7. {
  8. return true;
  9. }
  10. else
  11. return false;
  12. }
  13. //为String对象添加一个ChangeString 方法
  14. public static string ChangeString(this String s,string str)
  15. {
  16. return str + ":" + s;
  17. }
  18. }
  19. public class Student
  20. {
  21. public string Name { get; set; }
  22. public void Show()
  23. {
  24. this.CheckName();//Student拥有了CheckName这个方法
  25. }
  26. public void ShowString()
  27. {
  28. string s = "aaa";
  29. s.ChangeString("哈哈");//String拥有了ChangeString这个方法
  30. }
  31. }

这个例子很简单,为自定义的Student类扩展了一个CheckName方法,该方法没有参数,然后又为String系统自带的类 扩展了一个ChangeString 方法,该方法有一个string  类型的参数,注意:扩展方法必须声明为static静态方法,并且放在静态类中。

this不仅可以扩展类方法,还可以扩展接口,使得任何继承自该接口的类都会拥有此扩展方法。这里我们修改上面这个例子:

  1. public static class ClassHelper
  2. {
  3. //用this 声明将要吧这个方法附加到IStudent对象
  4. public static bool CheckName(this IStudent stu)
  5. {
  6. if (stu.Name == "小明")
  7. {
  8. return true;
  9. }
  10. else
  11. return false;
  12. }
  13. //为String对象添加一个ChangeString 方法
  14. public static string ChangeString(this String s, string str)
  15. {
  16. return str + ":" + s;
  17. }
  18. }
  19. public interface IStudent
  20. {
  21. public void Show();
  22. public string Name { get; set; }
  23. }
  24. public class StudentA : IStudent
  25. {
  26. public void Show()
  27. {
  28. this.CheckName();//Student拥有了CheckName这个方法
  29. }
  30. public void ShowString()
  31. {
  32. string s = "aaa";
  33. s.ChangeString("哈哈");//String拥有了ChangeString这个方法
  34. }
  35. }
  36. public class StudentB : IStudent
  37. {
  38. public void Show()
  39. {
  40. this.CheckName();//Student拥有了CheckName这个方法
  41. }
  42. public void ShowString()
  43. {
  44. string s = "aaa";
  45. s.ChangeString("哈哈");//String拥有了ChangeString这个方法
  46. }
  47. }

,注意这个例子的CheckName由this Student 改成了 this IStudent,IStudent 是一个接口,StudentA和StudentB都继承了这个接口,他们都会拥有CheckName这个扩展方法。

显然这样做是有好处的,当第三方提供给你一个DLL,其中包括许多类,由于这些类都是封装在DLL中的,当你想扩展其中某个类的时候,你却不能修改类的源代码。这时候你就可以用this来扩展。。。。

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(68)-微信公众平台开发- 资源环境准备
  2. linux源代码安装程序
  3. ADB am 命令详细参数
  4. PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。
  5. sql server 的cpu使用率过高的分析
  6. dataURI V.S. CSS Sprites 移动端
  7. uva580Critical Mass
  8. sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法(转)
  9. JSP中解决获取请求参数中文乱码问题
  10. C++异常处理的编程方法(阿愚,整整29集)
  11. 黑马程序员:Java基础总结----JavaBean 内省
  12. svn回滚
  13. 【转载】 ISO14229系列之一:简介
  14. 2017上海QCon之旅总结(下)
  15. 2018Pycharm激活方法
  16. 【OCP|052】OCP最新题库解析(052)--小麦苗解答版
  17. 【Django】关于上传图片遇到的问题
  18. python-requests数据驱动延伸
  19. 11.4 Daily Scrum
  20. #Leetcode# 917. Reverse Only Letters

热门文章

  1. 018 [工具软件]截图贴图注释 Snipaste
  2. 理解http浏览器的协商缓存和强制缓存
  3. js ajax 数组类型参数传递
  4. SSM学习
  5. 微信小程序组件解读和分析:十四、slider滑动选择器
  6. spring-mvc hello world (1)
  7. cookie设置和读取以及获取超链接参数
  8. (转)淘淘商城系列——SSM框架整合之表现层整合
  9. tensorflow ConfigProto
  10. CentOS中一些基本的操作记录