zoukankan      html  css  js  c++  java
  • 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# 扩展方法奇思妙用

     

    作者: XuGang   网名:钢钢
    出处: http://xugang.cnblogs.com
    声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!
  • 相关阅读:
    Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.
    .Net PostBack mechanism
    一些有用的正则表达式......收集中
    CI中利用hook实现用户权限访问
    PHP实现无限分类
    Unsatisfied forward or external declaration 错误分析
    Runtime error 217 at 00402840的错误原因
    Delphi Access Violation错误的分析
    植物大战僵尸全解密存档篇[转]学习内存读写的方法
    Delphi中模拟鼠标操作
  • 原文地址:https://www.cnblogs.com/xugang/p/1920502.html
Copyright © 2011-2022 走看看