在.NET Framework 2.0中使用扩展方法

时间:2009-04-23 19:15:51

标签: c# visual-studio-2008 .net-2.0 extension-methods

在Visual Studio 2008下 我可以创建一个扩展方法在.NET Framework 2.0项目下工作吗?

2 个答案:

答案 0 :(得分:10)

有一个ugly hack可以在.Net 2.0中使用扩展方法;但最好将框架升级到3.5。

替代来源:12

简而言之(来自链接#2):扩展方法只是使用[Extension]属性标记的普通静态方法。这个属性实际上只是由幕后的编译器添加的。在.NET 3.5中,它存在于System.Core中,因此只需定义您自己的属性:

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
  public class ExtensionAttribute : Attribute
  {
  }
}

答案 1 :(得分:2)

绝对。有一些hacky方法,但我正在使用的是从Mono project获取System.Core,将其所有代码添加到我自己的解决方案中名为System.Core的新.NET 2.0类库中,并重新编译它。有一些事情需要解决,例如将他们的MonoTODO属性更改为TODO注释,以及修复AssemblyInfo.cs,但它工作得很好。我现在在VS 2008中编译的2.0项目中使用LINQ和扩展方法。

假设您获得了Mono源的2.4版本,您应该找到以下代码:

<extracted directory>/mono-2.4/mcs/class/System.Core

如果您遇到VS 2005,可以下载SharpDevelop,使用针对2.0的目标构建您的System.Core dll,添加对已编译程序集的引用,它可能会有效,但我不知道知道VS 2005是否会出现扩展语法问题。我想它会给你一些嘴唇。