# mono-api-reflection.html

## Fetching Types, and Basic Reflection

`mono_custom_attrs_get_attr`
Syntax
MonoObject* mono_custom_attrs_get_attr (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass)

`mono_reflection_assembly_get_assembly`
Syntax
MonoAssembly* mono_reflection_assembly_get_assembly (MonoReflectionAssembly *refassembly)

Parameters

refassembly | the `System.Reflection.Assembly` object

Return value
the `MonoAssembly*` associated with the C# `System.Reflection.Assembly` object refassembly.
`mono_reflection_free_type_info`
Syntax
void mono_reflection_free_type_info (MonoTypeNameParse *info)

`mono_reflection_get_custom_attrs_blob`
Syntax
MonoArray* mono_reflection_get_custom_attrs_blob (MonoReflectionAssembly *assembly, MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *propValues, MonoArray *fields, MonoArray* fieldValues)

Parameters

ctor | custom attribute constructor
ctorArgs | arguments o the constructor
properties |
propValues |
fields |
fieldValues |

Return value
a `Byte` array representing the blob of data.
Description
Creates the blob of data that needs to be saved in the metadata and that represents the custom attributed described by ctor, ctorArgs etc.
`mono_reflection_get_custom_attrs_by_type`
Syntax
MonoArray* mono_reflection_get_custom_attrs_by_type (MonoObject *obj_raw, MonoClass *attr_klass, MonoError *error)

Parameters

obj | a reflection object handle

Return value
an array with all the custom attributes defined of the reflection handle obj. If attr_klass is non-`NULL`, only custom attributes of that type are returned. The objects are fully build. Return `NULL` if a loading error occurs.
`mono_reflection_get_custom_attrs_data`
Syntax
MonoArray* mono_reflection_get_custom_attrs_data (MonoObject *obj_raw)

Parameters

obj | a reflection obj handle

Return value
an array of `System.Reflection.CustomAttributeData`, which include information about attributes reflected on types loaded using the Reflection Only methods
`mono_reflection_get_custom_attrs`
Syntax
MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj_raw)

Parameters

obj | a reflection object handle

Return value
an array with all the custom attributes defined of the reflection handle obj. The objects are fully build. Return `NULL` if a loading error occurs.
`mono_reflection_get_token`
Syntax
guint32 mono_reflection_get_token (MonoObject *obj_raw)

Return value
the metadata token of obj which should be an object representing a metadata element.
`mono_reflection_get_type`
Syntax
MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, gboolean *type_resolve)

Parameters

image | a metadata context
info | type description structure
ignorecase | flag for case-insensitive string compares
type_resolve | whenever type resolve was already tried

Description

Build a MonoType from the type description in info.

`mono_reflection_parse_type`
Syntax
int mono_reflection_parse_type (char *name, MonoTypeNameParse *info)

`mono_reflection_type_get_type`
Syntax
MonoType* mono_reflection_type_get_type (MonoReflectionType *reftype)

Parameters

reftype | the `System.Type` object

Return value
the `MonoType*` associated with the C# `System.Type` object reftype.
`mono_reflection_type_from_name`
Syntax
MonoType* mono_reflection_type_from_name (char *name, MonoImage *image)

Parameters

name | type name.
image | a metadata context (can be `NULL`).

Description

Retrieves a `MonoType` from its name. If the name is not fully qualified, it defaults to get the type from image or, if image is `NULL` or loading from it fails, uses corlib.

`mono_reflection_get_custom_attrs_info`
Syntax
MonoCustomAttrInfo* mono_reflection_get_custom_attrs_info (MonoObject *obj_raw)

Parameters

obj | a reflection object handle

Return value
the custom attribute info for attributes defined for the reflection handle obj. The objects.

FIXME this function leaks like a sieve for SRE objects.
Description

## Custom Attributes

`mono_custom_attrs_construct`
Syntax
MonoArray* mono_custom_attrs_construct (MonoCustomAttrInfo *cinfo)

`mono_custom_attrs_free`
Syntax
void mono_custom_attrs_free (MonoCustomAttrInfo *ainfo)

`mono_custom_attrs_from_assembly`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_assembly (MonoAssembly *assembly)

`mono_custom_attrs_from_class`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_class (MonoClass *klass)

`mono_custom_attrs_from_event`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_event (MonoClass *klass, MonoEvent *event)

`mono_custom_attrs_from_field`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_field (MonoClass *klass, MonoClassField *field)

`mono_custom_attrs_from_index`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_index (MonoImage *image, guint32 idx)

Return value
`NULL` if no attributes are found or if a loading error occurs.
Description

`mono_custom_attrs_from_method`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_method (MonoMethod *method)

`mono_custom_attrs_from_param`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_param (MonoMethod *method, guint32 param)

Parameters

method | handle to the method that we want to retrieve custom parameter information from
param | parameter number, where zero represent the return value, and one is the first parameter in the method

Return value
the custom attribute object for the specified parameter, or `NULL` if there are none.
Description

The result must be released with mono_custom_attrs_free().

`mono_custom_attrs_from_property`
Syntax
MonoCustomAttrInfo* mono_custom_attrs_from_property (MonoClass *klass, MonoProperty *property)

`mono_custom_attrs_has_attr`
Syntax
gboolean mono_custom_attrs_has_attr (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass)

##

`mono_module_file_get_object`
Syntax
MonoReflectionModule* mono_module_file_get_object (MonoDomain *domain, MonoImage *image, int table_index)

`mono_module_get_object`
Syntax
MonoReflectionModule* mono_module_get_object (MonoDomain *domain, MonoImage *image)

`mono_method_body_get_object`
Syntax
MonoReflectionMethodBody* mono_method_body_get_object (MonoDomain *domain, MonoMethod *method)

Parameters

domain | an app domain
method | a method

Return value
A `System.Reflection.MethodBody` object representing the method method.
`mono_event_get_object`
Syntax
MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event)

Parameters

domain | an app domain
klass | a type
event | a event

Return value
A `System.Reflection.MonoEvent` object representing the event event in class klass.
`mono_assembly_get_object`
Syntax
MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly)

Parameters

domain | an app domain
assembly | an assembly

Return value
a `System.Reflection.Assembly` object representing the `MonoAssembly` assembly.
`mono_param_get_objects`
Syntax
MonoArray* mono_param_get_objects (MonoDomain *domain, MonoMethod *method)

`mono_field_get_object`
Syntax
MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field)

Parameters

domain | an app domain
klass | a type
field | a field

Return value
A `System.Reflection.MonoField` object representing the field field in class klass.
`mono_property_get_object`
Syntax
MonoReflectionProperty* mono_property_get_object_checked (MonoDomain *domain, MonoClass *klass, MonoProperty *property, MonoError *error)

Parameters

domain | an app domain
klass | a type
property | a property
error | set on error

Return value
a `System.Reflection.MonoProperty` object representing the property property in class klass. On error returns `NULL` and sets error.