protected AbstractEntity(int id, string name, string desc, PropertyList properties,
     EntityStatus status) : base(name, desc)
 {
     if (properties == null)
         ArgumentNull.Throw("properties");
     ID = id;
     Properties = properties;
     this.status = status ?? EntityStatus.NormalStatus;
 }
 protected AbstractCharacter(int id, string name, string desc, PropertyList properties)
     : base(id, name, desc, properties)
 { }
 public Item(int id, string name, string desc, PropertyList properties)
     : base(id, name, desc, properties)
 { }
 protected AbstractEntity(int id, string name, string desc, PropertyList properties)
     : this(id, name, desc, properties, null)
 { }
 public PropertyList Create(List<PropertyID> ids)
 {
     if (ids == null)
         ArgumentNull.Throw("ids");
     Dictionary<PropertyID, IProperty> instance = new Dictionary<PropertyID, IProperty>();
     foreach (PropertyID yid in ids)
         instance.Add(yid, this.creaters[yid](yid));
     foreach (KeyValuePair<PropertyID, SetRestrictor> pair in this.parents)
         pair.Value.SetRestrictor(instance[pair.Key], instance);
     PropertyList properties = new PropertyList(instance.Values.ToArray());
     AfterCreates(properties);
     return properties;
 }