Extension methods con .NET Micro Framework (Italiano)

Il .NET Micro Framework non supporta gli extension methods, perché non contiene la classe ExtensionAttribute, utilizzata appunto per indicare che un metodo è un’estensione. Tuttavia, aggiungere questa funzionalità è molto semplice. Innanzi tutto, creiamo questa classe direttamente nel nostro progetto:

using System;

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

Questo ci permette di creare extension methods nel solito modo che conosciamo:

public static class Utils
{
    public static bool StartsWith(this string s, string value)
    {
        return s.IndexOf(value) == 0;
    }

    public static bool Contains(this string s, string value)
    {
        return s.IndexOf(value) > 0;
    }
}

L’utilizzo, poi, è immediato:

string nome = "Marco";
bool b1 = nome.StartsWith("M");	// Restituisce true
bool b2 = nome.Contains("f");	// Restituisce false
Advertisements

  1. #1 by NinjaCross on March 11, 2014 - 9:06 AM

    Non sono sicuro al 100%, ma temo che questo non sia sufficiente.
    Sto utilizzando la versione 4.2, ed il compilatore di VS2010 mi restituisce l’errore 0x81010009 (MMP) quando tento di compilare classi contenenti extension methods.
    Da notare che Intellisense non fa una piega, per lui la sintassi è perfettamente accettabile.
    Idem per Resharper.

    • #2 by Marco Minerva on March 11, 2014 - 9:32 AM

      .NET Micro Framework 4.2 supporta nativamente gli Extension methods, quindi non hai bisogno di creare il Custom Attribute indicato nel post per poterli usare.

      • #3 by NinjaCross on March 11, 2014 - 9:53 AM

        Ho verificato, ed effettivamente l’errore non era dovuto all’uso degli extension methods, ma bensì ad una interface generic.
        Grazie per la dritta 🙂

  1. Cercare file su una memory card SD (Italiano) « Integral Design

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: