zoukankan      html  css  js  c++  java
  • c# 扩展方法的理解

    前言

    扩展方法可以在不继承或者修改类里面的内容,进行类方法的扩展,他可以假装是这个类的实例方法,实际上这是编译器内部帮我们进行了修改

    扩展方法的条件

    • 扩展方法必须是一个非嵌套、非泛型的静态类,静态类里面必须是静态方法(如果要使用泛型可以使用泛型方法)
    • 第一个参数只能是this关键词作为前缀
    • 第一个参数不能是指针类型

    扩展方法的例子

    namespace ListExtensionTest
    {
    public static class ListExtension//扩展方法的定义
    {
    public static void ReadListElement<T>(this List<T> list, Action<T> action)
    {
    foreach (var temp in list)
    {
    action(temp);
    }
    } 
    }
    public class Film
    {
    public string Name { get; set; }
    public int Year { get; set; }
    }
    public class Program
    {
    static void Main(string[] args)
    {
    var films = new List<Film>
    {
    new Film{Name = "Some like it hot", Year = 1978},
    new Film{Name = "The Wizard of oz", Year = 1998},
    new Film{Name = "Jaws", Year = 1975},
    new Film{Name = "Sing in the Rain", Year = 2000},
    };
    films.ReadListElement(x => Console.WriteLine(x.Name + " and " + x.Year));// 扩展方法的使用
    }
    }
    }
    
    

    这边可以理解为 list调用ReadListElement方法 参数为Action action

    当你鼠标放在扩展方法的时候可以显示extension来区别扩展方法和实例方法
    在这里插入图片描述
    扩展方法不会抛出空指针异常。

    总结

    • 不能盲目的使用扩展方法,要尽可能避免让代码维护人员感觉奇怪(我自己目前还是有点迷惑)
    • 合理的使用命名空间
    • 扩展方法linq中大量的使用可以学习参考
    • 个人感觉扩展方法用起来还是很爽的
  • 相关阅读:
    js弹出DIV层
    .net 生成静态页面
    新开博客
    随机生成验证码
    ASP.NET错误处理方法总结
    webgis
    看樱花
    今天转载的笑话,挺好笑呵
    用Tomcat插件在Eclipse上搭建可跟踪调试的J2EE WEB开发环境
    关于JSTL的简单说明
  • 原文地址:https://www.cnblogs.com/narojay/p/11232080.html
Copyright © 2011-2022 走看看