so many thanks for all your great help ,
What about this please :
Code:
internal static IObject ReadObject(uint constructorNb = 0)
{
var myDef = type.GetCustomAttribute<MYDefAttribute>();
var obj = Activator.CreateInstance(type, true);
IEnumerable<FieldInfo> fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
if (myDef.inheritBefore) fields = fields.GroupBy(f => f.DeclaringType).Reverse().SelectMany(g => g);
ulong myflags = 0;
boolFlagAttribute boolFlag;
foreach (var field in fields)
{
if (((boolFlag = field.GetCustomAttribute<boolFlagAttribute>()) != null) && (myflags & (1UL << boolFlag.Bit)) == 0) continue;
object value = field.FieldType;
field.SetValue(obj, value);
if (field.FieldType.IsEnum)
if (field.Name == "myflags") myflags = (uint)value;
else if (field.Name == "myflags2") myflags |= (ulong)(uint)value << 32;
}
return (IObject)obj;
}