2009-06-10 13 views
5

I metodi di estensione sono disponibili anche nel framework CE? Ho un metodo di estensione per la stringa che funziona bene in un progetto di Windows Form, tuttavia non verrà costruito nell'applicazione PocketPC.C# Metodi di estensione su PocketPC Windows CE

Ho pensato che sarebbe stata una cosa facile da scoprire, tuttavia non sono riuscito a trovare alcuna informazione sui metodi di estensione su PocketPC.

Modifica: Ooops questo è stato il mio errore. Ho scritto il metodo di estensione in Visual Studio 2008, tuttavia il progetto PocketPC veniva compilato in Visual Studio 2005, cosa che non avevo realizzato. Beh, questa è un'ora della mia vita, non tornerò mai più. Grazie a tutti per le risposte comunque.

+0

Quale errore (s) stai vedendo? – ChrisF

risposta

7

Volevo chiarire un po 'di confusione qui. I metodi di estensione sono una caratteristica del compilatore, non necessariamente una versione particolare del framework. Pertanto, i metodi di estensione possono essere utilizzati su qualsiasi piattaforma in cui esiste una versione del compilatore che supporta entrambi i metodi di estensione e quella piattaforma.

Il compilatore C# 3.0 è in grado di eseguire il target su framework 2.0 e supporta i metodi di estensione in modo che siano disponibili sul framework compatto.

L'unica cosa che il framework fornisce effettivamente per i metodi di estensione è ExtensionAttribute. Tuttavia questo non ha alcuna funzionalità ad esso associata e può essere definito dall'applicazione se non è disponibile. Ecco un post sul blog che ho scritto su questo argomento

2

Sono supportati nel Compact Framework in base allo this blog post. Tuttavia, mi aspetto che richiedano Compact Framework versione 3.5. Che versione stai usando?

2

Quale versione di framework è destinata? Se ci si rivolge CF 2.0 da VS2008, potrebbe essere necessario dichiarare ExtensionAttribute ...

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

Un buon collegamento a questo qui: http://blog.markarteaga.com/UsingExtensionMethodsInNETCF20.aspx –

+0

Beh, forse - ma è meglio includere anche l'AttributeUsage ;-p –

+0

Ya, abbastanza vero. –

0

si può utilizzare con .NET Compact Framework 2.0 e VS2008 attraverso un piccolo trucco in base alla this blog.

3

Sì, sono supportati in CF 3.5. Se si utilizza CF 2.0, sarà necessario definire ExtensionAttribute e quindi funzioneranno.

// 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(); 
     } 
    } 
}