Supponiamo di avere inserito le seguenti variabili protette nella nostra classe:
class Foo
{
protected string m_FooString;
protected int m_FooInt;
...
// Che inizializziamo nel costruttore
public Foo()
{
m_FooString = String.Empty;
m_FooInt = 0;
}
// Alle quali successivamente aggiungiamo le seguenti proprietà
public string FooString
{
get { return m_FooString; }
set { this.m_FooString = value; }
}
...
}
Fin qui tutto semplice vero? Tuttavia, pensiamo per un attimo di ripetere questa operazione per una 20 di variabili e per una decina di classi - a meno di avere dei plug-in/utility/etc. appositi - in questo caso tale compito diventa arduo.
In questo caso possono darci una mano le macro di VS.NET
Ad esempio per l'inizializzazione possiamo utilizzare una macro che trasformi la seguente riga:
protected string m_Foo;
in
m_Foo = String.Empty;
Ecco la macro:
Sub init_string()
DTE.ActiveDocument.Selection.WordRight(True, 2)
DTE.ActiveDocument.Selection.Delete()
DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.CharLeft()
DTE.ActiveDocument.Selection.Text = " = String.Empty"
DTE.ActiveDocument.Selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
DTE.ActiveDocument.Selection.LineDown()
End Sub
Mentre per gli interi va bene questa:
Sub init_number()
DTE.ActiveDocument.Selection.WordRight(True, 2)
DTE.ActiveDocument.Selection.Delete()
DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.CharLeft()
DTE.ActiveDocument.Selection.Text = " = 0"
DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.LineDown()
DTE.ActiveDocument.Selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
End Sub
Poi supponiamo di voler trasformare la seguente riga:
protected string m_Foo;
in
public string Foo
{
set { return m_Foo; }
get { this.m_Foo = value; }
}
allora la macro è la seguente:
Sub getset()
DTE.ActiveDocument.Selection.WordRight(True)
DTE.ActiveDocument.Selection.Text = "public "
DTE.ActiveDocument.Selection.WordRight()
DTE.ActiveDocument.Selection.EndOfLine(True)
DTE.ActiveDocument.Selection.CharLeft(True)
DTE.ActiveDocument.Selection.Copy()
DTE.ActiveDocument.Selection.CharLeft()
DTE.ActiveDocument.Selection.Delete(2)
DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.DeleteLeft()
DTE.ActiveDocument.Selection.NewLine()
DTE.ActiveDocument.Selection.Text = "{"
DTE.ActiveDocument.Selection.NewLine()
DTE.ActiveDocument.Selection.Text = "get { return "
DTE.ActiveDocument.Selection.Paste()
DTE.ActiveDocument.Selection.Text = "; }"
DTE.ActiveDocument.Selection.NewLine()
DTE.ActiveDocument.Selection.Text = "set { this."
DTE.ActiveDocument.Selection.Paste()
DTE.ActiveDocument.Selection.Text = " = value; }"
DTE.ActiveDocument.Selection.NewLine()
DTE.ActiveDocument.Selection.Text = "}"
DTE.ActiveDocument.Selection.NewLine()
DTE.ActiveDocument.Selection.LineDown()
End Sub
Attenzione!!!
1) In Questo caso la macro presuppone che la varibiale sia definita nello stile
2) Tutte le macro proposte presuppongono che ci troviamo all'inizio della riga da trasformare, es:
protected string m_Foo;
si presuppone che il cursore si trovi davanti alla p (di protected) prima di eseguire la macro.
Spero di essere stato d'aiuto a qualcuno, se avete altre macro da proporre non avete che da commentare