Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

sabato 8 dicembre 2007

Utilizzare gli extension methods anche con .NET 2.0

Il post di ieri di Daniele Mantovani mi ha fatto nascere un dubbio: dal momento che il Common Language Runtime del .NET Framework 3.5 è lo stesso della versione precedente e che gli extension methods sono semplicemente "zucchero sintattico", c'è un modo per utilizzarli anche con i progetti indirizzati a .NET 2.0? La risposta è... sì, è possibile!

Vediamo come fare. Creiamo un progetto .NET 2.0 con Visual Studio 2008 e definiamo la seguente classe:

1 using System; 2 using System.Text; 3 4 namespace ExtensionMethods 5 { 6 public static class Utils 7 { 8 public static byte[] GetBytes(this string str) 9 { 10 return Encoding.Default.GetBytes(str); 11 } 12 } 13 }

Provando a compilare, si ottiene il seguente messaggio di errore:

Cannot define a new extension method because the compiler required type 'System.Runtime.CompilerServices.ExtensionAttribute' cannot be found. Are you missing a reference to System.Core.dll?

Ovviamente, il codice non funziona perché il compilatore non trova l'attributo ExtensionAttribute, contenuto nell'assembly System.Core.dll, che fa parte di .NET 3.5 (Una piccola nota: utilizzare la parola chiave this prima del tipo dell'argomento accettato dal metodo (riga 8) equivale a dire che quel metodo deve essere decorato con l'attributo ExtensionAttribute). Tuttavia, andando ad indagare, si scopre che questo è un attributo "vuoto", ovvero non contiene proprietà sue: in pratica, serve solo al compilatore per fargli capire che stiamo definendo una nuova estensione per il tipo.

A questo punto ci si può chiedere: e se io mi definissi a mano l'attributo mancante? Proviamo. Aggiungiamo un nuovo namespace in fondo alla classe ExtensionMethods, in questo modo:

namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } }

In pratica, ci siamo definiti a mano l'attributo ExtensionAttribute. Se tentiamo una nuova compilazione, notiamo che ora fila tutto liscio! Facciamo un'ultima prova per verificare il corretto funzionamento. Spostiamoci in un'altra classe e digitiamo il seguente codice:

string s = "Marco"; Console.WriteLine(s.GetBytes()[0]);

Anche in questo caso, la compilazione avviene correttamente: il metodo GetBytes è stato riconosciuto come extension method per il tipo string.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (7) | Filed Under [ C# Orcas & .NET 3.5 ]

SQL Server 2005 Books Online di Settembre 2007

Mentre tutti noi aspettiamo con ansia il rilascio di SQL Server 208, Microsoft continua ad aggiornare la documentazione relativa all'attuale versione: è stato così rilasciato l'SQL Server 2005 Books Online di Settembre 2007. Il download, raggiunbile qui, è di circa 135 MB ed è disponibile in diverse lingue, italiano compreso.

Technorati tags: ,

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) | Filed Under [ Updates & Service Pack SQL Server ]

Testare un programma antivirus

Solitamente, la prima cosa che si fa con un nuovo programma o una nuova periferica è testarla per verificarne il corretto funzionamento: si scrivono un paio di caratteri con il programma di videoscrittura, si stampa una pagina di prova con la stampante, si scatta una foto con la macchina fotografica digitale. Ma cosa si può fare per testare un programma antivirus? Scartando a priori l'ipotesi di procurarsi un virus reale per effettuare la verifica, si può ricorrere all'EICAR Standard Anti-Virus Test File: si tratta di un piccolo programma assolutamente innocuo, ma che tutti gli antivirus in circolazione riconoscno come virus. Potete scaricarlo da questo indirizzo: http://www.eicar.org/anti_virus_test_file.htm.

Fonte: PC Professionale

Technorati tags:

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) | Filed Under [ Tutto & Oltre :-) ]

Powered by:
Powered By Subtext Powered By ASP.NET