CE 框架上是否也提供扩展方法?我有一个在 windows 窗体项目中工作正常的字符串扩展方法,但它不会在 PocketPC 应用程序中构建。
我认为这很容易找到,但是我无法在 PocketPC 上找到有关扩展方法的任何信息。
编辑:哎呀,这是我的错误。我在 Visual Studio 2008 中编写了扩展方法,但是 PocketPC 项目正在 Visual Studio 2005 中编译,我没有意识到这一点。好吧,那是我生命中的一个小时,我再也回不来了。无论如何,谢谢大家的回答。
CE 框架上是否也提供扩展方法?我有一个在 windows 窗体项目中工作正常的字符串扩展方法,但它不会在 PocketPC 应用程序中构建。
我认为这很容易找到,但是我无法在 PocketPC 上找到有关扩展方法的任何信息。
编辑:哎呀,这是我的错误。我在 Visual Studio 2008 中编写了扩展方法,但是 PocketPC 项目正在 Visual Studio 2005 中编译,我没有意识到这一点。好吧,那是我生命中的一个小时,我再也回不来了。无论如何,谢谢大家的回答。
想在这里澄清一点混乱。扩展方法是编译器的一个特性,不一定是特定版本的框架。因此,可以在任何平台上使用扩展方法,只要该平台的编译器版本支持扩展方法和该平台。
C# 3.0 编译器可以针对 2.0 框架并支持扩展方法,因此它们应该在紧凑框架上可用。
框架实际上为扩展方法提供的唯一东西是 ExtensionAttribute。但是,这没有任何关联的功能,如果它不可用,可以由您的应用程序定义。这是我写的关于这个主题的博客文章
是的,它们在 CF 3.5 中受支持。如果您使用的是 CF 2.0,则需要定义 ExtensionAttribute,然后它们才能工作。
// this is a definition of a 3.5 class for use in 2.0. If we upgrade to target CF3.5, we will need to remove it...
namespace System.Runtime.CompilerServices
{
public class ExtensionAttribute : Attribute { }
}
namespace TestExtension
{
public static class Extensions
{
public static int TestMethod(this string value)
{
return value.ToString();
}
}
}
根据这篇博文,它们在 Compact Framework 中得到支持。但是,我希望它们需要 Compact Framework 3.5 版。您使用的是哪个版本?
你的目标是什么框架版本?如果您的目标是 VS2008 的 CF 2.0,您可能需要声明 ExtensionAttribute...
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class
| AttributeTargets.Method)]
public sealed class ExtensionAttribute : Attribute {}
}
根据此博客,您可以通过一个小技巧将它与 .NET Compact Framework 2.0 和 VS2008 一起使用。