2009-01-22 21 views
3

我们假设我们有一个Model,其上有几个属性,我们想创建这个模型的装饰类,以增强它的一些额外属性。现在,我们要创建的Model的所有属性值填充,可能使用一个构造函数DecoratedModel的新实例Model作为参数:挑战:快速填充装饰类的字段

public class DecoratedModel : Model 
{ 
    public DecoratedModel(Model baseModel) 
    { 
     // Populate decorated model generically from baseModel 
    } 
} 

什么是填充DecoratedModel最通用的,简洁的方式从Model

回答

5

那么,你应该能够使用反射来反映基类的属性,然后用它来设置子类的属性。我还没有广泛地测试过,但类似这样的东西可能会起作用:

 public DecoratedModel(Model m) 
     { 
      foreach (var prop in typeof(Model).GetProperties()) 
      { 
       this.GetType().GetProperty(prop.Name).SetValue(this, prop.GetValue(m, null),null); 
      } 
     } 
2

虽然它确实需要Model类有一个拷贝构造函数来拷贝Decorator类中的Model数据,但这样做至少可以确保对于所有装饰器,您只需调用基类拷贝构造函数。

public class DecoratedModel : Model 
{ 
    public DecoratedModel(Model baseModel) 
     : base(baseModel) 
    { 
     // Populate decorated model generically from baseModel 
    } 
} 

public class Model 
{ 
    public Model(Model copy) 
    { 
     this.x = copy.x; 
     // etc. 
    } 
}