Вопрос

Доступны ли методы расширения в рамках CE?У меня есть метод расширения для строки, который отлично работает в проекте Windows Forms, однако он не будет встраиваться в приложение 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.Какую версию вы используете?

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

namespace System.Runtime.CompilerServices
{
    [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class
         | AttributeTargets.Method)]
    public sealed class ExtensionAttribute : Attribute {}
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top