• 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

    publicstaticclass ExtendMethods
    {
    //定义string类型的扩展方法IsRight()
    publicstaticbool IsRight(thisstring str)
    {
    switch (str.ToUpper( ).Trim( ))
    {
    case"RIGHT":
    returntrue;
    case"YES":
    returntrue;
    case"OK":
    returntrue;
    default:
    returnfalse;
    }
    }

    //定义一个int类型的扩展方法IsRight()
    publicstaticbool IsRight(thisint val)
    {
    if (val >10)
    {
    returntrue; }
    else
    {
    returnfalse; }
    }

    //定义一个对于所有类型的扩展方法,打印类信息同时添加一个字符串作为提示信息
    publicstaticvoid PrintHint(thisobject obj, string hint)
    {
    System.Console.WriteLine(obj.ToString( )
    +"--"+ hint);
    }
    }

    namespace UseExtMethod
    {
    //必须显式声明使用ExtendMethods命名空间
    using ExtendMethods;
    class Program
    {
    staticvoid 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;"。另外,在扩展方法被调用时和普通的成员方法调用一样,扩展方法的第一个参数也需要在调用时指出。



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    vue中创建全局单文件组件/命令
    export default与export的区别
    Android Fragment的使用(转载)
    ios 内存管理总结
    object-c 混编 调用C,C++接口
    Python3基础 yield send 获得生成器后,需要先启动一次
    Python3基础 yield next 获取生成器生出的值
    Python3基础 函数 无return、return 空或None 的效果相同
    Python3基础 函数 函数名赋值操作
    Python3基础 函数 函数名作为参数传给函数
  • 原文地址:https://www.cnblogs.com/08shiyan/p/2001350.html
Copyright © 2020-2023  润新知