public void Init(CecilLoader loader) { InitModifiers(); if (typeDefinition.HasGenericParameters) { for (int i = 0; i < typeDefinition.GenericParameters.Count; i++) { loader.AddConstraints(this, (DefaultTypeParameter)this.TypeParameters[i], typeDefinition.GenericParameters[i]); } } InitNestedTypes(loader); // nested types can be initialized only after generic parameters were created loader.AddAttributes(typeDefinition, this); this.HasExtensionMethods = HasExtensionAttribute(typeDefinition); // set base classes if (typeDefinition.IsEnum) { foreach (FieldDefinition enumField in typeDefinition.Fields) { if (!enumField.IsStatic) { BaseTypes.Add(loader.ReadTypeReference(enumField.FieldType, entity: this)); break; } } } else { if (typeDefinition.BaseType != null) { BaseTypes.Add(loader.ReadTypeReference(typeDefinition.BaseType, entity: this)); } if (typeDefinition.HasInterfaces) { foreach (TypeReference iface in typeDefinition.Interfaces) { BaseTypes.Add(loader.ReadTypeReference(iface, entity: this)); } } } InitMembers(loader); this.typeDefinition = null; Freeze(); // freeze after initialization ApplyInterningProvider(loader.InterningProvider); }