Внутри макро атрибута для класса на стадии BeforeInheritance необходимо определить, наследует ли класс от определенного класса. Если не наследует — сделать наследуемым.
Например. Имеются базовый класс
public abstract class BaseBusinessObject:System.ComponentModel.INotifyPropertyChanged
{
public event PropertyChanged:System.ComponentModel.PropertyChangedEventHandler;
protected NotifyPropertyChanged(propertyName:string):void
{
def handler = PropertyChanged;
unless(handler == null)
{
PropertyChanged(this,System.ComponentModel.PropertyChangedEventArgs(propertyName))
}
}
}
и макро атрибут
[MacroUsage(MacroPhase.BeforeInheritance,MacroTargets.Class)]
public macro BusinessObject(tb:TypeBuilder,params props:list[PExpr])
{
def isInheritsBaseClass(tb){.....}
def makeInheritedFromBase(tb){...}
unless(isInheritsBaseClass(tb))
{
makeInheritedFromBase(tb)
}
}
Данный атрибут предполагается использовать таким образом:
[BusinessObject(FirstName:string,LastName:string)]
public class Person
{
Some additional code
}
[BusinessObject(Salary:double,Manager:Employee)]
public class Employee:Person
{
}
Так вот, данный макро атрибут должен сделать класс Person наследуемым от BaseBusinessObject, а класс Employee оставить без изменения в плане наследования. Как этого добиться?
Заранее благодарю всех.