一个“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
要定义在一个静态类中,方法本身也要是一个静态方法
扩展方法可以被对象实例调用,也可以使用静态类名进行静态调用 --------------------编程问答-------------------- --------------------编程问答-------------------- 估计是copy来的方法 --------------------编程问答-------------------- “扩展方法”,扩展二字怎样理解呢? --------------------编程问答-------------------- 去掉this --------------------编程问答--------------------
那你代码是怎么写的??
扩展方法。。。
实现和调用 --------------------编程问答-------------------- 给一个类扩展方法必须为静态的方法。其中this关键字是扩展方法必须的,放在扩展类型参数的前面,在调用该扩展方法时this后面这个类型参数不会显示。
--------------------编程问答-------------------- 你这个Sum方法前面缺少static关键字。 --------------------编程问答-------------------- --------------------编程问答--------------------
谢谢。。。 --------------------编程问答-------------------- 我说的够清楚了哦 --------------------编程问答-------------------- --------------------编程问答-------------------- 扩展方法什么意思???
到底扩展的是谁??? --------------------编程问答-------------------- 扩展的就是第一个用this 修饰的参数的类型(type) 的实例 --------------------编程问答-------------------- 这里为啥要加this?小白路过没明白。。。
看代码像是wcf吧? --------------------编程问答-------------------- 扩展方法什么意思???顾名思义,扩展就是在原来的基础上附加功能,对一个没有源代码的类扩展功能,比如DLL里面的类,需要用到这中方法扩展了,比如,对public class classA扩展,就这样,public static void methodA(this classA a,string strA){},在这个方法中之所以要加this classA a,作用有两个,一、这个方法可以通过这个a来调用classA里面的成员了,其实就是通过实例调用一样的道理,另一方面表示这个方法是这个类的扩展方法,这样就可以在其他地方通过classA的实例来调用这个方法了。
到底扩展的是谁???上面已经有了答案。
--------------------编程问答--------------------
~~~~~ 这样高端的用法不是很多的 不了解的时候不要去用很痛苦会 --------------------编程问答-------------------- 我突然想起来好像C#里面有个叫什么部分定义(大概这个意思)的这么个概念。是不是跟扩展方法一个意思? --------------------编程问答--------------------
partial 你说的是这个吧,部分类,或者叫分布类,跟这个完全不是一个东西。 --------------------编程问答-------------------- --------------------编程问答--------------------
扩展方法。。。 --------------------编程问答-------------------- 什么去掉 this,加个 static 不就完了,人家要的就是扩展方法的实现,你还给人家去掉,晕。 --------------------编程问答-------------------- 类的“扩展方法”和类的“常规方法”有什么不同??? --------------------编程问答--------------------
扩展方法只是为了写的时候方便,实际调用的时候还是普通方法。 --------------------编程问答--------------------
--------------------编程问答--------------------
/// <summary>
/// source=source+another
/// </summary>
[OperationContract]
public static List<Monitoring> Sum(this List<Monitoring> source, List<Monitoring> another)
{
......
}
扩展方法只是一个语法糖,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 --------------------编程问答--------------------
顶一下。。。 --------------------编程问答--------------------
为什么说扩展方法是实现“Linq”的基础呢???
补充:.NET技术 , C#