当前位置:编程学习 > C#/ASP.NET >>

一个“this”

一个“this”,提示“扩展方法必须是静态的”的错误信息。

代码如下:
/// <summary>
        /// source=source+another
        /// </summary>
        [OperationContract]
        public  List<Monitoring> Sum(this List<Monitoring> source, List<Monitoring> another)
        {

问题:这个“this”提示错误信息如下,

错误 1 扩展方法必须是静态的 C:\Users\Administrator\Desktop\GLLG(Preview2.0)\Mycems.UI\App_Code\ChartsService.cs 197 34 C:\...\Mycems.UI\

1、这个“this”的作用是什么?
2、为什么会提示这种错误?
--------------------编程问答-------------------- this  去掉 --------------------编程问答--------------------
扩展方法要注意的:
方法的首个参数必须是this
要定义在一个静态类中,方法本身也要是一个静态方法
扩展方法可以被对象实例调用,也可以使用静态类名进行静态调用 --------------------编程问答--------------------
引用 1 楼 kkxxllasasas 的回复:
this 去掉
--------------------编程问答-------------------- 估计是copy来的方法 --------------------编程问答-------------------- “扩展方法”,扩展二字怎样理解呢? --------------------编程问答-------------------- 去掉this  --------------------编程问答--------------------
引用 5 楼 starryplayer 的回复:
“扩展方法”,扩展二字怎样理解呢?


那你代码是怎么写的??

扩展方法。。。

实现和调用 --------------------编程问答-------------------- 给一个类扩展方法必须为静态的方法。其中this关键字是扩展方法必须的,放在扩展类型参数的前面,在调用该扩展方法时this后面这个类型参数不会显示。
--------------------编程问答-------------------- 你这个Sum方法前面缺少static关键字。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 7 楼 porschev 的回复:
引用 5 楼 starryplayer 的回复:

“扩展方法”,扩展二字怎样理解呢?


那你代码是怎么写的??

扩展方法。。。

实现和调用


谢谢。。。 --------------------编程问答-------------------- 我说的够清楚了哦 --------------------编程问答-------------------- --------------------编程问答-------------------- 扩展方法什么意思???

到底扩展的是谁??? --------------------编程问答-------------------- 扩展的就是第一个用this 修饰的参数的类型(type) 的实例 --------------------编程问答-------------------- 这里为啥要加this?小白路过没明白。。。
看代码像是wcf吧? --------------------编程问答-------------------- 扩展方法什么意思???顾名思义,扩展就是在原来的基础上附加功能,对一个没有源代码的类扩展功能,比如DLL里面的类,需要用到这中方法扩展了,比如,对public class classA扩展,就这样,public static void methodA(this classA a,string strA){},在这个方法中之所以要加this classA a,作用有两个,一、这个方法可以通过这个a来调用classA里面的成员了,其实就是通过实例调用一样的道理,另一方面表示这个方法是这个类的扩展方法,这样就可以在其他地方通过classA的实例来调用这个方法了。
到底扩展的是谁???上面已经有了答案。
--------------------编程问答--------------------
引用 2 楼 porschev 的回复:
扩展方法要注意的:
方法的首个参数必须是this
要定义在一个静态类中,方法本身也要是一个静态方法
扩展方法可以被对象实例调用,也可以使用静态类名进行静态调用

~~~~~ 这样高端的用法不是很多的 不了解的时候不要去用很痛苦会 --------------------编程问答-------------------- 我突然想起来好像C#里面有个叫什么部分定义(大概这个意思)的这么个概念。是不是跟扩展方法一个意思? --------------------编程问答--------------------
引用 19 楼 kzl332058242 的回复:
我突然想起来好像C#里面有个叫什么部分定义(大概这个意思)的这么个概念。是不是跟扩展方法一个意思?

partial 你说的是这个吧,部分类,或者叫分布类,跟这个完全不是一个东西。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 19 楼 kzl332058242 的回复:
我突然想起来好像C#里面有个叫什么部分定义(大概这个意思)的这么个概念。是不是跟扩展方法一个意思?


扩展方法。。。 --------------------编程问答-------------------- 什么去掉 this,加个 static 不就完了,人家要的就是扩展方法的实现,你还给人家去掉,晕。 --------------------编程问答-------------------- 类的“扩展方法”和类的“常规方法”有什么不同??? --------------------编程问答--------------------
引用 24 楼  的回复:
类的“扩展方法”和类的“常规方法”有什么不同???

扩展方法只是为了写的时候方便,实际调用的时候还是普通方法。 --------------------编程问答--------------------

/// <summary>
/// source=source+another
/// </summary>
[OperationContract]
public static List<Monitoring> Sum(this List<Monitoring> source, List<Monitoring> another)
{
    ......
}
--------------------编程问答--------------------
引用 24 楼  的回复:
类的“扩展方法”和类的“常规方法”有什么不同???


扩展方法只是一个语法糖,list.Count() 显然要比 helper.Count(list) 好看,当调用多个扩展方法的时候好处就很明显:

list.Where(x =>x == 0).Count()

常规方法是可以访问类的私有成员的,扩展方法没有这个权限。

--------------------编程问答-------------------- 扩展方法.net3.0的新特性,是实现linq的基础。平时多看看书或者多百度下吧! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- public List<Monitoring> Sum(this List<Monitoring> source, List<Monitoring> another)
 
change to 
public static  List<Monitoring> Sum(this List<Monitoring> source, List<Monitoring> another)
  --------------------编程问答-------------------- this扩展只支持.net2.0吧

类的“扩展方法”和类的“常规方法”有什么不同???
public class Common{
    public static string GetEnumDescription(this Enum en)
   {

   }
   public static string GetEnumDescription2(Enum en)
   {

   }
}
public Enum Sex{boy=1,girl=2}
如果你有定义一个枚举,直接Sex.boy.GetEnumDescription();

没有this的,就要Common.GetEnumDescription2(Sex.boy)

--------------------编程问答-------------------- 长知识了。。。static呵呵 必须是静态方法 --------------------编程问答-------------------- 额,说错了,this扩展不支持.net2.0 --------------------编程问答--------------------
引用 34 楼  的回复:
额,说错了,this扩展不支持.net2.0


顶一下。。。 --------------------编程问答--------------------
引用 34 楼  的回复:
额,说错了,this扩展不支持.net2.0


为什么说扩展方法是实现“Linq”的基础呢???
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,