博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为已有类添加方法
阅读量:5135 次
发布时间:2019-06-13

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

扩展方法是C# 4.0的又一个特性,它允许开发人员在不创建派生类型和不修改原始类型的基础上,直接向现有类型"添加"方法。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

包含扩展方法的类必须定义为静态(static)类,扩展方法也必须定义为静态(static)方法,它的第一个参数指定该方法被扩展到哪一个类型中,同时第一个参数要用this关键字修饰,扩展方法可以作为普通方法一样的方式被调用。

示例代码4-16演示扩展方法的使用。包含扩展方法的类ExtendMethods被定义为static类,扩展方法:IsRight()、PrintHint()都被定义为static方法,而且第一个参数都用this关键字修饰,表示该方法扩展到某个类型。其中,IsRight()方法被扩展到string和int类型,而PrintHint()方法则被扩展到object类型,这样,PrintHint()就可以被所有类型访问,因为所有类型都是object类型的子类。

示例代码4-16

public   static   class  ExtendMethods 
// 定义string类型的扩展方法IsRight() 
public   static   bool  IsRight( this   string  str) 
switch  (str.ToUpper( ).Trim( )) 
case   " RIGHT " : 
return   true ; 
case   " YES " : 
return   true ; 
case   " OK " : 
return   true ; 
default : 
return   false ; 
// 定义一个int类型的扩展方法IsRight() 
public   static   bool  IsRight( this   int  val) 
if  (val  >   10 ) 
{  return   true ; } 
else  
{  return   false ; } 
// 定义一个对于所有类型的扩展方法,打印类信息同时添加一个字符串作为提示信息 
public   static   void  PrintHint( this   object  obj,  string  hint) 
System.Console.WriteLine(obj.ToString( )  +   " -- "   +  hint); 
namespace  UseExtMethod 
// 必须显式声明使用ExtendMethods命名空间 
using  ExtendMethods; 
class  Program 
static   void  Main( string [] args) 
// 使用string类的扩展方法IsRight() 
string  str1  =   " right " , str2  =   " err " ; 
System.Console.WriteLine( " str1.IsRight() 
=   "  + str1.IsRight( ). 
ToString()); 
System.Console.WriteLine( " str2.IsRight() 
=   "  + str2.IsRight( ). 
ToString( )); 
// 使用int类型的扩展方法IsRight() 
int  i1  =   11 , i2  =   5 ; 
System.Console.WriteLine( " i1.IsRight() 
=   "  + i1.IsRight( ). 
ToString( )); 
System.Console.WriteLine( " i2.IsRight()
=   "  + i2.IsRight( ). 
ToString( )); 
// 使用Object类型的扩展方法PrintHint() 
string  str3  =   " 誓言 " ; 
str3.PrintHint( " 你好! " ); 
}

生成并运行示例代码4-16,得到程序输出如下:

str1.IsRight()  =  True 
str2.IsRight()  =  False 
i1.IsRight()  =  True 
i2.IsRight()  =  False 
誓言-- 你好!

在使用扩展方法前需要显式引用扩展方法所在的命名空间,如示例代码4-16中的代码 "using ExtendMethods;"。另外,在扩展方法被调用时和普通的成员方法调用一样,扩展方法的第一个参数也需要在调用时指出。

转载于:https://www.cnblogs.com/fengbing/articles/2924706.html

你可能感兴趣的文章
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
企业级应用与互联网应用的区别
查看>>
itext jsp页面打印
查看>>
Perl正则表达式匹配
查看>>
DB Change
查看>>
nginx --rhel6.5
查看>>