Определение базового класса
От: varan73  
Дата: 11.03.11 07:15
Оценка:
Внутри макро атрибута для класса на стадии 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 оставить без изменения в плане наследования. Как этого добиться?
Заранее благодарю всех.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.