..net 3.5新特性之用this关键字为类添加扩展方法
2024-09-04 18:06:21
具体用法如下:
- public static class ClassHelper
- {
- //用this 声明将要吧这个方法附加到Student对象
- public static bool CheckName(this Student stu)
- {
- if (stu.Name == "小明")
- {
- return true;
- }
- else
- return false;
- }
- //为String对象添加一个ChangeString 方法
- public static string ChangeString(this String s,string str)
- {
- return str + ":" + s;
- }
- }
- public class Student
- {
- public string Name { get; set; }
- public void Show()
- {
- this.CheckName();//Student拥有了CheckName这个方法
- }
- public void ShowString()
- {
- string s = "aaa";
- s.ChangeString("哈哈");//String拥有了ChangeString这个方法
- }
- }
,
这个例子很简单,为自定义的Student类扩展了一个CheckName方法,该方法没有参数,然后又为String系统自带的类 扩展了一个ChangeString 方法,该方法有一个string 类型的参数,注意:扩展方法必须声明为static静态方法,并且放在静态类中。
this不仅可以扩展类方法,还可以扩展接口,使得任何继承自该接口的类都会拥有此扩展方法。这里我们修改上面这个例子:
- public static class ClassHelper
- {
- //用this 声明将要吧这个方法附加到IStudent对象
- public static bool CheckName(this IStudent stu)
- {
- if (stu.Name == "小明")
- {
- return true;
- }
- else
- return false;
- }
- //为String对象添加一个ChangeString 方法
- public static string ChangeString(this String s, string str)
- {
- return str + ":" + s;
- }
- }
- public interface IStudent
- {
- public void Show();
- public string Name { get; set; }
- }
- public class StudentA : IStudent
- {
- public void Show()
- {
- this.CheckName();//Student拥有了CheckName这个方法
- }
- public void ShowString()
- {
- string s = "aaa";
- s.ChangeString("哈哈");//String拥有了ChangeString这个方法
- }
- }
- public class StudentB : IStudent
- {
- public void Show()
- {
- this.CheckName();//Student拥有了CheckName这个方法
- }
- public void ShowString()
- {
- string s = "aaa";
- s.ChangeString("哈哈");//String拥有了ChangeString这个方法
- }
- }
,注意这个例子的CheckName由this Student 改成了 this IStudent,IStudent 是一个接口,StudentA和StudentB都继承了这个接口,他们都会拥有CheckName这个扩展方法。
显然这样做是有好处的,当第三方提供给你一个DLL,其中包括许多类,由于这些类都是封装在DLL中的,当你想扩展其中某个类的时候,你却不能修改类的源代码。这时候你就可以用this来扩展。。。。
最新文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(68)-微信公众平台开发- 资源环境准备
- linux源代码安装程序
- ADB am 命令详细参数
- PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。
- sql server 的cpu使用率过高的分析
- dataURI V.S. CSS Sprites 移动端
- uva580Critical Mass
- sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法(转)
- JSP中解决获取请求参数中文乱码问题
- C++异常处理的编程方法(阿愚,整整29集)
- 黑马程序员:Java基础总结----JavaBean 内省
- svn回滚
- 【转载】 ISO14229系列之一:简介
- 2017上海QCon之旅总结(下)
- 2018Pycharm激活方法
- 【OCP|052】OCP最新题库解析(052)--小麦苗解答版
- 【Django】关于上传图片遇到的问题
- python-requests数据驱动延伸
- 11.4 Daily Scrum
- #Leetcode# 917. Reverse Only Letters