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
    声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!
  • 相关阅读:
    BZOJ5194: [Usaco2018 Feb]Snow Boots(排序&set)(可线段树优化)
    BZOJ5280: [Usaco2018 Open]Milking Order(二分+拓扑)
    BZOJ5281: [Usaco2018 Open]Talent Show(01分数规划&DP)
    BZOJ4837:[Lydsy1704月赛]LRU算法(双指针&模拟)
    【NOIP2013】传染病控制
    bzoj 2754: [SCOI2012]喵星球上的点名
    bzoj 4197: [Noi2015]寿司晚宴
    Codeforces Round #438 B. Race Against Time
    Codeforces Round #438 C. Qualification Rounds
    Codeforces Round #438 D. Huge Strings
  • 原文地址:https://www.cnblogs.com/xugang/p/1920502.html
Copyright © 2011-2022 走看看