Методы расширения C# на PocketPC Windows CE
-
13-09-2019 - |
Вопрос
Доступны ли методы расширения в рамках 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 с помощью небольшого взлома в соответствии с этот блог.