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中大量的使用可以学习参考
  • 个人感觉扩展方法用起来还是很爽的

转载于:https://www.cnblogs.com/narojay/p/11232080.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值