C# 3.0 添加扩展方法扩展现有类

扩展方法是C# 3.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/08shiyan/archive/2011/03/31/2001350.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
扩展方法(Extension Method)是C# 3.0中的一个新特性,它允许程序员向已有的添加新的方法,而无需修改原始的定义,也无需继承或实现接口。扩展方法可以为任何添加新的方法,包括系统型,而不需要修改原始型的代码。 使用扩展方法能够使代码更加简洁、易读,同时也能够提高代码的复用性和可维护性。扩展方法可以应用于许多场景,例如: 1. 在不修改已有的情况下,为其添加新的功能。 2. 扩展系统的功能,例如为字符串添加一个新的方法,用于判断字符串是否为空。 3. 扩展第三方库的功能,例如为某个第三方库提供一个新的扩展方法。 下面是一个扩展方法的示例,为字符串添加了一个名为IsNullOrEmpty的扩展方法: ```csharp public static class StringExtensions { public static bool IsNullOrEmpty(this string str) { return string.IsNullOrEmpty(str); } } // 使用扩展方法 string myString = null; bool result = myString.IsNullOrEmpty(); ``` 需要注意的是,扩展方法必须声明在一个静态中,并且必须是一个静态方法扩展方法必须以this关键字作为第一个参数,并且该参数必须是扩展方法所要扩展型。本例中,IsNullOrEmpty方法的第一个参数是this string str,即扩展方法所要扩展型是字符串型。 总之,扩展方法C#中一个非常有用的特性,可以为程序员带来便利和效率。在实际开发中,我们需要根据具体情况合理使用扩展方法,以便提高代码的可读性、可重用性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值