C# 扩展方法[学习]

来源:互联网 发布:方维拼团源码下载 编辑:程序博客网 时间:2024/05/21 11:36

C# 扩展方法[学习]

 

C#中可以定义扩展方法,还可以为集合做扩展方法

示例如下:

扩展方法
using System;
using System.Collections.Generic;

using MySpace;//注意:引入扩展方法的空间

namespace Con_1
{
   
class Program
    {
       
staticvoid Main(string[] args)
        {
           
string str= "{0}先生。".With("XuGang");
Console.WriteLine(
"您好!"+ str);

           
//2调用集合的扩展方法
            str.ShowItems<char>();
        }
    }
}

namespace MySpace
{
   
//扩展方法必须在非泛型静态类中定义
    publicstatic class MyMethods
    {
       
//注意:第一个参数使用“this”获得当前对象
        publicstatic string With(thisstring _context,params string[] _args)
        {
           
returnstring.Format(_context,_args);
        }


       
//2为集合做扩展方法
        publicstatic void ShowItems<T>(this IEnumerable<T> _al)
        {
           
foreach (var itemin _al)
            {
                Console.WriteLine(item);
            }
        }
    }
}

注意:

1  C# 只支持扩展方法,不支持扩展属性、扩展事件等;

2  方法名无限制,第一个参数必须带 this ;

3  扩展方法的命名空间可以使用 namespace System ,但不推荐;

4  定义扩展方法的类是静态类;

在使用this 参数扩展了方法之后,该程序集会在编译的时候会在对应静态类上加上类似以下的东西。以便于调用的时候方便找到。
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class| AttributeTargets.Assembly)]
public sealed class ExtensionAttribute : Attribute
{
  ......
}


MSIL 中,自动添加了如下的代码:
.custom instance void [System.Core]System.Runtime.CompilerServices.ExtensionAttribute::.ctor()= ( 01 0000 00 )

可以看出,在运行时是需要引用 System.Core.dll。

原创粉丝点击