È possibile farlo in C# 3 o 4? Forse con qualche riflessione?Eseguire un metodo prima di tutti i metodi di una classe
class Magic
{
[RunBeforeAll]
public void BaseMethod()
{
}
//runs BaseMethod before being executed
public void Method1()
{
}
//runs BaseMethod before being executed
public void Method2()
{
}
}
EDIT
Esiste una soluzione alternativa per questo, fare Magic
un singoletto e inserire il codice sul getter dell'istanza statica. Questo è quello che ho fatto:
public class Magic
{
private static Magic magic = new Magic();
public static Magic Instance
{
get
{
magic.BaseMethod();
return magic;
}
}
public void BaseMethod()
{
}
//runs BaseMethod before being executed
public void Method1()
{
}
//runs BaseMethod before being executed
public void Method2()
{
}
}
Che ne dici di un costruttore? – JConstantine
L'utilizzo di un costruttore non è una soluzione, perché se dovessi eseguire, diciamo, due metodi di un'istanza, otterrei il basemethod da eseguire solo una volta. Anche molto inadeguato per istanze statiche. –
Si potrebbe fare ciò usando 'dynamic' e implementando [' IDynamicMetaObjectProvider'] (http://msdn.microsoft.com/en-us/library/system.dynamic.idynamicmetaobjectprovider.aspx). Ciò ti consentirà di eseguire il tuo codice durante l'associazione, che avviene prima dell'esecuzione di un metodo. Nota: questo suggerimento è fornito come una curiosità. In realtà non è un buon modo per risolvere il tuo problema. – Brian