Czy można to zrobić w C# 3 lub 4? Może z odrobiną refleksji?Uruchomić metodę przed wszystkimi metodami klasy
class Magic
{
[RunBeforeAll]
public void BaseMethod()
{
}
//runs BaseMethod before being executed
public void Method1()
{
}
//runs BaseMethod before being executed
public void Method2()
{
}
}
EDIT
Jest alternatywnym rozwiązaniem dla tego dokonać Magic
Singleton i umieścić kod na getter instancji statycznego. Tak zrobiłem:
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()
{
}
}
Co powiesz na konstruktora? – JConstantine
Używanie konstruktora nie jest rozwiązaniem, ponieważ gdybym miał wykonać, powiedzmy, dwie metody jednej instancji, wystarczyłoby tylko raz wykonać metodę basemethod. Również bardzo mało istotne dla instancji statycznych. –
Można to zrobić za pomocą 'dynamic' i implementując [' IDynamicMetaObjectProvider'] (http://msdn.microsoft.com/en-us/library/system.dynamic.idynamicmetaobjectprovider.aspx). Umożliwi to uruchomienie własnego kodu podczas wiązania, co ma miejsce przed wykonaniem metody. Uwaga: ta sugestia jest dostarczana jako ciekawostka. To naprawdę nie jest dobry sposób na rozwiązanie problemu. – Brian