Getter e Setters: che noia!!!

Come ben dice Andrea, una delle cose più noiose e ripetitive del C# (e forse anche di VB.NET, ma non so di per certo perchè non ho mai provato) è scrivere i banali accessors per i Transfer Objects e similari.

#develop ha un'ottimo class wizard, che genera anche tutti i metodi accessors, ma purtroppo non ha il debugger, non permette di sviluppare per web.

Ecco quindi un'altra Macro per VS.NET: crea una proprietà pubblica (con getter e setter) per ogni "field" privato definito nella classe.

Imports EnvDTE
Imports System.Diagnostics
Imports System.Windows
Imports System.Windows.Forms
Imports System
Imports System.Drawing


Public Module WriteGetterAndSetter

    
Sub WriteGetterAndSetter()
        
Dim projitem As ProjectItem = DTE.ActiveDocument.ProjectItem
        
Dim filecm As FileCodeModel = projitem.FileCodeModel
        
Dim celt As CodeElement = filecm.CodeElements.Item(1)
        
Dim celttype As CodeType
        
If (TypeOf celt Is CodeNamespace) Then
            
celt = celt.members.item(1)
        
End If
        If 
(TypeOf celt Is CodeType) Then
            
celttype = CType(celt, CodeType)
        
Else
            Throw New Exception
("Didn't find a type definition as first thing in file or find a namespace as the first thing with a type inside the namespace.")
        
End If


        Dim 
ep As EditPoint = celttype.GetStartPoint(vsCMPart.vsCMPartHeader).CreateEditPoint()

        
Try
            
DTE.UndoContext.Open("Insert public Properties")
            
Dim objTextDoc As Window
            
Dim objMovePt As TextSelection

            objTextDoc = DTE.ActiveDocument.ActiveWindow
            objMovePt = objTextDoc.Selection
            ep.MoveToPoint(objMovePt.TopPoint)
            
'ep.LineUp()

            '' Do comment.

            
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & "#region ""Properties""" & Microsoft.VisualBasic.Constants.vbCrLf)
            
'' Iterate over code elements emitting doc comments for functions.
            
For Each celt In celttype.Members
                
If (celt.Kind = vsCMElement.vsCMElementVariable) Then
                    Dim 
codefun As CodeVariable = celt
                    
If (codefun.Access = vsCMAccess.vsCMAccessPrivate) Then
                        
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)

                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & "public " & codefun.
Type.AsString & " " & codefun.Name.Substring(1, codefun.Name.Length - 1))
                        ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & "{")
                        ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & "get" & Microsoft.VisualBasic.Constants.vbCrLf & Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & "{" & Microsoft.VisualBasic.Constants.vbCrLf)
                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & "return " & codefun.Name & ";" & Microsoft.VisualBasic.Constants.vbCrLf)
                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & "}" & Microsoft.VisualBasic.Constants.vbCrLf)
                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & "set" & Microsoft.VisualBasic.Constants.vbCrLf & Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & "{" & Microsoft.VisualBasic.Constants.vbCrLf)
                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & codefun.Name & " = value;" & Microsoft.VisualBasic.Constants.vbCrLf)
                        ep.Insert(Microsoft.VisualBasic.Constants.vbTab & Microsoft.VisualBasic.Constants.vbTab & "}")
                        ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf & Microsoft.VisualBasic.Constants.vbTab & "}" & Microsoft.VisualBasic.Constants.vbCrLf)
                    
End If
                End If
            Next
            
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf & Microsoft.VisualBasic.Constants.vbCrLf & Microsoft.VisualBasic.Constants.vbTab & "#endregion")
        
Catch ex As Exception
            
MessageBox.Show(ex.Message)
        
Finally
            
DTE.UndoContext.Close()
        
End Try
    End Sub


End Module

Non è come avere il class builder, ma sempre meglio che niente Smile

powered by IMHO

Media portal: HTPC opensource in C#

Da un po' di tempo si parla di Win 2005 Media Edition (o come diavolo si chiama)..
Ho trovato un splendito sostituto, realizzato in C#, che gira su Win XP con DirectX 9.0c... è Media Portal
L'ho installato sul mio portatile per provarlo, in vista di metterlo sul PC che userò in soggiorno con il monitor al plasma, per vederci la TV (a dire il vero vedo solo Sex&the city e MTV) e i vari DVD e DivX.
E' molto be fatto, è estendibile con vari plugins (tipo posta, MSN Messenger, ricette, allarmi, ecc...), si connettere a internet per scaricare la guida TV... e soprattutto è OpenSource... Penso di aver trovato il programma da usare per il mio settobox...
«dicembre»
domlunmarmergiovensab
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678