C# 扩展方法[学习]

简介:
+关注继续查看

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

示例如下:

复制代码
扩展方法
using System;
using System.Collections.Generic;

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

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

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

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


//2为集合做扩展方法
public static void ShowItems<T>(this IEnumerable<T> _al)
{
foreach (var item in _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 00 00 00 )

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

参考来源:

C#进阶 Methods下 Extension Methods

不能不说的C# 特性-扩展方法

C# 扩展方法奇思妙用




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2010/12/29/1920502.html,如需转载请自行联系原作者

相关文章
|
13天前
|
编译器 C#
c# 自定义扩展方法
c# 自定义扩展方法
|
10月前
|
C#
c#中的扩展方法
c#中的扩展方法
41 0
|
开发框架 .NET C#
面向对象——扩展方法
面向对象——扩展方法
94 0
|
C# .NET 开发框架
C# 扩展方法 白话总结
我们在变成的时候时常遇到这样的问题,new了一个系统内的对象之后,我们想要对该对象有一个方法可是却点不出来,说明该对象本身没有声明该方法,可是微软又不允许我们去该对象的代码,怎么办? 在C# 3.
864 0