C#扩展方法解析 结合js

前几天在群里看到有人问了一个这样的问题,这里想结合js心的来解释这个问题。

图:

问第一个参数为什么不需要传入。

这个先要熟悉net3.5的扩展方法的知识 。

我下面解释一段代码 估计大家就会有清楚的认识 (这个最大的错误就是微软的东西高度封装不像js 一样可以看到源码 不过还好 mvc是开源的)

下面还原它的真面目。

namespace ExtensMethods
{
    sealed class tsp
    {
        private double d1, d2, d3;

        public tsp(double d1, double d2, double d3)
        {
//这个this就是类对象tsp
this.d1 = d1; this.d2 = d2; this.d3 = d3; } public double sum() { return d1 + d2 + d3; } }
如果你对js熟悉看到这里不知道有点感觉了没 下面的 this tsp 就是上面的 类
ExtensMethods命名空间下的类tsp对象 这样
this tsp就拥有了上面类所有的属性和方法(感觉是不是有点像继承的感觉呢?)现在当做参数他本来就是上面的类对象的信息的信息当然就不需要传递了 自然就可以通过this tsp 的参数 里面sp调用sum了
图:

这样调用的时候就不要赋值了 不知道大家看明白了没有。(在提示一下 tsp类里面有个构造函数 他自动加载了他内部的属性 )
static class extens {
public static double avg(this tsp sp)
{
return sp.sum() / 3;
}
}

class Program {

static void Main(string[] args)
{
tsp sp
= new tsp(1,2,3);//因为是static 所有不用new avg 就可以直接调用了 是不是很像mvc里面的那个方法的形式呢 呵呵!
Console.WriteLine(
"sun={0}",sp.sum());
Console.WriteLine(
"avg={0}", sp.avg());
}
}
}

总结: this 就是当前对象的信息 所以this就拥有了当前对象所以的属性和方法(自然就可以调用或者使用了)。

不过和js不同的是this的当前当前对象主体不是一样 js代码:

$("xxx").click(function(){

var thisInfo=$(this);//这里的this是指xxx对象的信息 他有click事件当前就就含有click的属性了。

 $("yyy").each(function(){

   var _thisInfo=$(this);  //这里的this是指yyyy的对象的信息(注意不是xxx) 这里和c#不一样 你看上面的代码 在c#中这里的this是xxx对象信息

 });

});

原文地址:https://www.cnblogs.com/y112102/p/2863575.html