public override void Delete() { Type t = this.GetType(); FieldInfo[] infos = t.GetFields(); for (int i = 0; i < infos.Length; i++) { FieldInfo fi = infos[i]; if (IsBaseType(fi.FieldType, typeof(SBase))) { SBase v = fi.GetValue(this) as SBase; v.Delete(); } } }