• C#3.0 为我们带来什么(6) —— 扩展方法


    在c#3.0中可以出现这样的语法 
    int i = 2;
    Console.WriteLine(i.Square());
    这就是扩展方法。

    如何使int具有Square方法呢?
    只需要定义这样一个函数
            public static int Square(this int i)
           {
                return i * i;
            }
            this 表示针对int的实例和索引器的this的含义是一样的,int表示给int这种类型进行扩展

    但是这个扩展函数是有一定限制的。
     1 扩展方法必须是静态的 
     2 扩展方法必须在顶级静态类上定义
    来看看IL实现
    .method public hidebysig static int32  Square(int32 i) cil managed
    {
      .custom instance void [System.Core]System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 )
      // 代码大小       9 (0x9)
      .maxstack  2
      .locals init ([0] int32 CS$1$0000)
      IL_0000:  nop
      IL_0001:  ldarg.0
      IL_0002:  ldarg.0
      IL_0003:  mul
      IL_0004:  stloc.0
      IL_0005:  br.s       IL_0007
      IL_0007:  ldloc.0
      IL_0008:  ret
    } // end of method MyExtention::Square

    C#编译器生成了MyExtention.Square(int32 i),并没有对int类型进行改变。我们可以把他当作visitor模式来使用,但是跟visitor是有本质不同的。
  • 相关阅读:
    删掉从svn 文件夹里复制出来所带的信息(去掉.svn文件夹)
    AS3 loader
    as3鼠标事件
    linux 随机数
    AS3资源处理
    字符串合并
    linux time.h
    fat32转ntfs
    linux 杂项
    oracle——创建数据表
  • 原文地址:https://www.cnblogs.com/tianyamoon/p/1028039.html
Copyright © 2020-2023  润新知