c#参数列表中的this---扩展方法的使用

今天在看WPF视频的时候,遇到了在参数列表中写了this的案例,第一次见到。

public static void AddSlideFromRight
(this Storyboard storyboard, 
float seconds, 
double offset, 
float decelerationRatio=0.9f)
        {
        }

具体方法体我们就不看了,只看在定义方法的参数列表中的第一个参数,写的:this Storyboard storyboard

Storyboard 代表了参数类型,this关键字表示了该方法是Storyboard类型的扩展方法。

关于扩展方法,有如下几点需要注意的地方:

1. 扩展方法是一种特殊的静态方法,虽然是静态方法,但是可以像使用类型上的实例方法一样去使用扩展方法(调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异)。
2. 扩展方法的第一个参数指定该方法作用于哪个类型,并且该参数以this修饰符为前缀。
3. 扩展方法必须在非范型静态类中定义。
 

为了便于理解以上的几点概念,特意尝试了一下,对string类型进行扩展:

//必须在静态类中定义扩展方法
public static class Program
    {    
        private static void Main(string[] args)
        {
            string myString = "Hello World!";

            myString.ExtensionMethod();

            Console.Read();
        }
//自定义string类型的扩展方法
        public static void ExtensionMethod(this string myString)
        {
            Console.WriteLine(myString);
        }
    }

以下是控制台的输出结果:

其实,提到扩展方法,就应该想到自己第一次接触的这个概念,是在学习Action和Function的时候,当初研究Where方法就有涉及。下面我们来看一下关于List的Where扩展方法:

List<int> numbers = new List<int>() { 1,3,5,6,8};
numbers.Where(x=>x>5);
//这里是常规用法
List<int> newnumbersA= numbers.Where(x => x > 5).ToList();
foreach (var item in newnumbersA)
{
    Console.WriteLine(item);
}

Console.WriteLine("\n\n\n\n");

List<int> newnumbersB =
//因为是定义在静态类中的静态方法,因为也可以直接用调用静态方法的方式去执行
Enumerable.Where(newnumbersA, x => x > 5).ToList();
foreach (var item in newnumbersB)
{
    Console.WriteLine(item);
}

从输出结果可以看出,对于扩展方法:

类的实例.静态扩展方法()

静态类.静态扩展方法()

效果是等同的。

 

 

最后贴一张图来总结一下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值