Методы расширения C # в PocketPC Windows CE - PullRequest
5 голосов
/ 10 июня 2009

Доступны ли методы расширения на платформе CE? У меня есть метод расширения для строки, который отлично работает в проекте Windows Forms, однако он не будет встроен в приложение PocketPC.

Я подумал, что это будет легко узнать, однако мне не удалось найти какую-либо информацию о методах расширения в PocketPC.

Редактировать: Упс, это была моя ошибка. Я написал метод расширения в Visual Studio 2008, однако проект PocketPC компилировался в Visual Studio 2005, чего я не понял. Ну, это час моей жизни, я никогда не вернусь. В любом случае, спасибо всем за ответы.

Ответы [ 5 ]

7 голосов
/ 10 июня 2009

Хотелось немного прояснить ситуацию. Методы расширения являются особенностью компилятора, а не обязательно конкретной версией фреймворка. Следовательно, методы расширения могут использоваться на любой платформе, где есть версия компилятора, которая поддерживает как методы расширения, так и эту платформу.

Компилятор C # 3.0 может использовать целевые платформы 2.0 и поддерживает методы расширения, поэтому они должны быть доступны в компактной среде.

Единственное, что на самом деле фреймворк предоставляет для методов расширения, это ExtensionAttribute. Однако это не связано с какой-либо функциональностью и может быть определено вашим приложением, если оно недоступно. Вот пост в блоге, который я написал на эту тему

3 голосов
/ 10 июня 2009

Да, они поддерживаются в 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();
        }
    }
}
2 голосов
/ 10 июня 2009

На какую версию фреймворка вы нацеливаетесь? Если вы нацелены на CF 2.0 из VS2008, вам может потребоваться объявить ExtensionAttribute ...

namespace System.Runtime.CompilerServices
{
    [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class
         | AttributeTargets.Method)]
    public sealed class ExtensionAttribute : Attribute {}
}
2 голосов
/ 10 июня 2009

Они поддерживаются в Compact Framework согласно этому сообщению в блоге . Тем не менее, я ожидаю, что они требуют Compact Framework версии 3.5. Какую версию вы используете?

0 голосов
/ 10 июня 2009

Вы можете использовать его с .NET Compact Framework 2.0 и VS2008 через небольшой взлом в соответствии с этим блогом.

...