Nuovo blog tecnico
Vi segnalo che ho aperto un nuovo blog completamente dedicato al mondo dell’informatica, mia passione seconda solo alla fotografia.
Il link del blog è http://codetailor.blogspot.com.
Vi segnalo che ho aperto un nuovo blog completamente dedicato al mondo dell’informatica, mia passione seconda solo alla fotografia.
Il link del blog è http://codetailor.blogspot.com.
Pubblicato da
Massimo Bonanni
alle
21:08
0
commenti
Etichette: .NET, .NET Framework, Architettura, Programmazione, Sviluppo, VB.NET, visual studio, Visual Studio 2008, Web
L’extension method che voglio postare questa volta consente di copiare le proprietà (almeno in lettura) di un oggetto sorgente, nelle proprietà (dello stesso tipo, con lo stesso nome e, almeno, in scrittura) di un altro oggetto:
<Extension()> _
Public Sub CopyFrom(ByVal destObj As Object, _
ByVal sourceObj As Object)
Dim sourceType = sourceObj.GetType()
Dim destType = destObj.GetType()
Dim sourceProperties = (From p In sourceType.GetProperties() _
Where p.CanRead _
Select p).ToList()
For Each sourceProp In sourceProperties
Dim propName = sourceProp.Name
Dim destProp = destType.GetProperty(propName)
If destProp IsNot Nothing AndAlso destProp.CanWrite Then
If sourceProp.GetType().Equals(destProp.GetType()) Then
Dim propValue = sourceProp.GetValue(sourceObj, Nothing)
Try
destProp.SetValue(destObj, propValue, Nothing)
Catch ex As Exception
End Try
End If
End If
Next
End Sub
Utilizzando questo moetodo possiamo scrivere:
.
.
Dim destObj as Object
destObj.CopyFrom(sourceObj)
.
.
in modo da copiare tutte le proprietà di sourceObj nelle proprietà comuni di destObj.
Pubblicato da
Massimo Bonanni
alle
19:39
0
commenti
Etichette: .NET, .NET Framework, Reflection, VB.NET, Visual Studio 2008
Sul numero 135 di ioProgrammo è presente un mio articolo sul linguaggio Buddy Script.
Pubblicato da
Massimo Bonanni
alle
13:54
0
commenti
Etichette: .NET, .NET Framework, Articoli, Sviluppo, Visual Studio 2008, Windows Live
Scrvo questo post solo per segnalare l’uscita di due miei articoli nel numero 134 di ioProgrammo in edicola a Gennaio:
Pubblicato da
Massimo Bonanni
alle
10:57
0
commenti
Etichette: .NET, .NET Framework, Articoli, Programmazione, VB.NET, Visual Studio 2008, Windows Live
Girando tra i vari blog, mi sono imbattuto nella possibilità di scaricare dei controlli gratuiti della DevExpress per sviluppatori .NET Framework.
Se siete interessati fatevi un giro su questo sito.
Pubblicato da
Massimo Bonanni
alle
21:04
0
commenti
Etichette: .NET, .NET Framework, ASP.NET, ASPX, Programmazione, Sviluppo, VB.NET, visual studio, Visual Studio 2008
Questo semplice extension method consente, a partire da un oggetto bitmap, di ottenere un nuova bitmap uguale a quella di partenza ma ridimensionata in base ad un fattore di larghezza e a uno di altezza:
<Extension()> _
Public Function CloneResize(ByVal image As Bitmap, ByVal zoomFactorWidth As Double, ByVal zoomFactorHeight As Double) As Bitmap
Dim width = image.Width
Dim height = image.Height
Dim newImage = New Bitmap(image, width * zoomFactorWidth, height * zoomFactorHeight)
Return newImage
End Function
Grazie a questo metodo possiamo, ad esempio ottenere, a partire dall’icona di sistema che indica il warning, una bitmap di dimensioni raddoppiate:
Drawing.SystemIcons.Warning.ToBitmap().CloneResize(2, 2)
Pubblicato da
Massimo Bonanni
alle
23:47
0
commenti
Etichette: .NET, .NET Framework, Programmazione, Sviluppo, VB.NET, Visual Studio 2008
Save a tutti,
è uscito, sul numero di ottobre di ioProgrammo, il mio articolo riguardante Windows live Messenger.
Si tratta del mio primo articolo su questa testata......speriamo bene!!!
Pubblicato da
Massimo Bonanni
alle
13:59
0
commenti
Etichette: .NET, .NET Framework, Articoli, ASP.NET, ASPX, Sviluppo, VB.NET, Visual Studio 2008, Windows Live
L'extension method che vi propongo oggi converte un oggetto che implementa l'interfaccia IQueryable in una DataTable.
L'argomento fieldNames è una stringa nella forma:
proprieta1[?];proprieta2[?];.....;properietaN[?]
dove:
proprieta : è il nome di una proprietà dell'oggetto contenuto nell'argomento "IQueryable" che diventerà una colonna della DataTable risultato;
? : è facoltativo ed indica che la colonna può contenere valori nullable.
La proprietà può essere anche una sottoproprietà dell'oggetto.
L'extension method fa uso della funzione statica esposta nel post VB.NET : Recuperare il valore o il tipo di una proprietà in maniera ricorsiva tramite reflection.
<Extension()> _
Public Function ToDataTable(ByVal queryableObj As IQueryable, _
ByVal fieldNames As String) As DataTable
Dim retTable As New DataTable
' recupero il tipo di oggetto di cui è formata l'interfaccia
Dim objType = queryableObj.ElementType
Dim fields = fieldNames.Split(";")
' creo le colonne
For Each field In fields
If Not String.IsNullOrEmpty(field) Then
Try
Dim propName = field.Replace("?", "")
Dim colType = ReflectionUtility.GetPropertyType(objType, propName)
Dim colName = propName.Replace(".", "_")
Dim col As New DataColumn With {.ColumnName = colName, _
.DataType = colType, _
.AllowDBNull = field.EndsWith("?")}
retTable.Columns.Add(col)
Catch ex As Exception
End Try
End If
Next
' riempio le colonne
For Each currObj In queryableObj
Dim row = retTable.NewRow
For Each field In fields
Dim propName = field.Replace("?", "")
Dim colName = propName.Replace(".", "_")
If retTable.Columns.Contains(colName) Then
row(colName) = ToBDNullableValue(ReflectionUtility.GetPropertyValue(currObj, field))
End If
Next
retTable.Rows.Add(row)
Next
Return retTable
End Function
Public Function ToBDNullableValue(ByVal obj As Object) As Object
Dim retObj As Object = DBNull.Value
If obj IsNot Nothing Then
retObj = obj
End If
Return retObj
End Function
Per chiarire la situazione facciamo un'esempio, supponiamo di avere il seguente pezzo di codice:
Dim dipendenti As Dipendente() = _
{New Dipendente With {.Cognome = "Bianchi", _
.Nome = "Carlo", _
.DataNascita = New DateTime(1970, 2, 26)}, _
New Dipendente With {.Cognome = "Verdi", _
.Nome = "Giuseppe", _
.DataNascita = New DateTime(1978, 1, 1)}, _
New Dipendente With {.Cognome = "Rossi", _
.Nome = "Bruno", _
.DataNascita = New DateTime(1980, 1, 1)}, _
New Dipendente With {.Cognome = "Bonaventura", _
.Nome = "Alessandro", _
.DataNascita = New DateTime(1960, 1, 1)}}
Dim persTable = dipendenti.AsQueryable().ToDataTable("Cognome;Nome;DataNascita.Year")
La tabella persTable conterrà:
L'esempio mostra come l'extension method possa essere utilizzato anche con normali array grazie all'extension method AsQueryable() presente nel framework .NET 3.5.
I nomi delle colonne della DataTable sono uguali ai nomi delle proprietà passate per argomento con il '.' sostituito con '_'.
Pubblicato da
Massimo Bonanni
alle
16:06
0
commenti
Etichette: .NET, .NET Framework, VB.NET, visual studio, Visual Studio 2008
Una delle nuove caratteristiche di C# 3.5 è la possibilità di definire le proprietà senza dover scrivere il codice di set e get e definire l'attributo privato che, dietro le quinte, contiene il valore.
Putroppo VB non prevede questa sintassi e, così ho realizzato un semplice snippet per automatizzare l'iter noioso della creazione delle proprietà.
Lo snippet crea il seguente codice:
Private_AttributeName As AttributeType
Public PropertyAttributeName() AsAttributeType
Get
Return Me._AttributeName
End Get
Set(ByValvalue AsAttributeType)
Me._AttributeName = value
End Set
End Property
dove AttributeName è il segnaposto per il nome dell'attributo e AttributeType il segnaposto per il tipo dell'attributo (e, quindi, della proprietà).
Lo snippet è scaricabile dal mio spazio su SkyDrive.
Pubblicato da
Massimo Bonanni
alle
10:35
0
commenti
Etichette: .NET, .NET Framework, Snippet, VB.NET, visual studio, Visual Studio 2008
Ieri ho dormito poco, ho preso due aerei entrambi in ritardo (uno dei quali quasi dirottato a Malpensa per la nebbia) e oggi sono attivo e sveglio come lo zerbino di casa!
Ma ne è valsa la pena!!
Pur non essendo uno sviluppatore prettamente web, la giornata è stata ricca di spunti e "ganci" per approfondire.
Innanzitutto grande Steve Ballmer, carismatico, verace e sicuramente una figura imponente (e non solo dal punto di vista fisico).
In un ora ci ha descritto cosa intende per web 2.0 e come vede il futuro del web nei prossimi anni e, a dargli retta, di lavoro ce ne sarà.
Bisognerà solo imboccare la giusta strada e crederci.
La mattina di fatto ci ha proposto dei case study (interessanti ma non come papà Steve) mentre il pomeriggio ha visto Silverlight 2.0, Windows Live e Silverlight per Mobile.
Decisamente interessante la sessione su Silverlight 2.0 con tanto codice scritto e consolidamento di quanto già c'è.
Piena di prosettive la seconda sessione su Windows Live che ci ha fornito spunti per integrare nuovi servizi nelle nostre applicazioni (anche qui tanto codice)
La terza sessione, invece, è stata da "sguardo da mucca che vede passare il treno", Tutti incollati allo schermo, meravigliati (o, almeno, io ero meravigliato) da Silverlight per Mobile (che ricordiamo appena sfornata) con effetti e vettorialità su un normale smartphone.
E siamo solo all'inizio!!!
Pubblicato da
Massimo Bonanni
alle
07:25
0
commenti
Etichette: .NET Framework, Sviluppo, VB.NET, Visual Studio 2008, Web
E' uscito sul numero 177 di Computer Programming il mio articolo/reportage sull'evento Microsoft di lancio dei prodotti 2008 (Visual Studio, SQL Server e Windows Server):
Pubblicato da
Massimo Bonanni
alle
10:21
0
commenti
Etichette: .NET, .NET Framework, Articoli, ASP.NET, Programmazione, Sviluppo, VB.NET, visual studio, Visual Studio 2008