Я пытаюсь что-то сделать, чтобы все классы, производные от некоторого базового класса, выполняли некоторые операции при их загрузке, но только один раз во время выполнения программы.Я хотел бы сделать так, чтобы человеку, производящему производный класс, не пришлось выполнять дополнительную работу.В моем примере у меня есть OnInheritedAttribute (), который я только что составил, который будет вызывать введенный делегат при определении дочернего класса.
public class DelegateHolder
{
public bool Operation(Type t) { /*...*/ };
static OnInheritedAttributeDelegate d = new OnInheritedAttributeDelegate(Operation);
}
[OnInheritedAttribute(DelegateHolder.d)]
public abstract class AInheritable
{ /*...*/ }
//ideally, I could do this, and have the processing done
public class SubClassA : AInheritable
{ /*...*/ }
//which would have the same effect as this, no attribute were assigned to AInheritable
public class SubClassB : AInheritable
{
private static readonly bool _dummy = DelegateHolder.Operation(SubClassB);
}
Я почти уверен, что второй метод будет делать то, чтоЯ хочу (при условии, что сборка не загружается несколько раз), но кажется, что было бы действительно раздражающим иметь каждый подкласс AInheritable, необходимый для вызова этого кода.
Другой вариант может быть
public class BaseClass
{
static bool initialized; //this may not work, it will probably make one value for all classes rather than each subclass.
public BaseClass()
{
if(!/*System.Reflection code to get static member initialized from class of (this)*/)
{
/*perform registration*/
/*System.Reflection code to get static member initialized from class of (this)*/ = true;
}
}
}
Но это кажется неуклюжим и расточительным, если будет создано много объектов.
Любой совет по оптимизации этого?