## Class Operations

The operations on `MonoClass*` allow you to query a number of properties of a .NET class from the C API.

This page contains information for how to obtain a MonoClass*, how to probe for different features of a MonoClass* and APIs to access class members and access fields. To access methods, see the method documentation API.

### Getting a MonoClass

You typically would obtain a `MonoClass*` pointer by using a combination of the `MonoImage*` where the type is located, the namespace and name using the `mono_class_from_name` or the `mono_class_from_name_case` APIs or by using the `mono_class_from_typeref` or `mono_class_from_typeref_checked` methods.

For low-level access, you can get the `MonoClass *` from an image and an ECMA type token relative to the `MonoImage*` by using mono_class_get.
`mono_class_get`
Syntax
MonoClass* mono_class_get (MonoImage *image, guint32 type_token)

Parameters

image | image where the class token will be looked up.
type_token | a type token from the image

Description

Returns the MonoClass with the given type_token on the image
`mono_class_from_mono_type`
Syntax
MonoClass* mono_class_from_mono_type (MonoType *type)

Parameters

type | describes the type to return

Description

This returns a MonoClass for the specified MonoType, the value is never `NULL`.
`mono_class_from_name`
Syntax
MonoClass* mono_class_from_name (MonoImage *image, const char* name_space, const char *name)

Parameters

image | The MonoImage where the type is looked up in
name_space | the type namespace
name | the type short name.

Description

Obtains a MonoClass with a given namespace and a given name which is located in the given MonoImage.

To reference nested classes, use the "/" character as a separator. For example use "Foo/Bar" to reference the class Bar that is nested inside Foo, like this: "class Foo { class Bar {} }".
`mono_class_from_name_case`
Syntax
MonoClass* mono_class_from_name_case_checked (MonoImage *image, const char *name_space, const char *name, MonoError *error)

Parameters

image | The MonoImage where the type is looked up in
name_space | the type namespace
name | the type short name.
error | if

Return value
The MonoClass if the given namespace and name were found, or `NULL` if it was not found. The error object will contain information about the problem in that case.
Description

Obtains a MonoClass with a given namespace and a given name which is located in the given MonoImage. The namespace and name lookups are case insensitive.

`mono_class_from_typeref`
Syntax
MonoClass* mono_class_from_typeref (MonoImage *image, guint32 type_token)

Parameters

image | a MonoImage
type_token | a TypeRef token

Return value
The MonoClass* representing the typeref token, `NULL` ifcould not be loaded.
Description

Creates the MonoClass* structure representing the type defined by the typeref token valid inside image.
`mono_class_from_typeref_checked`
Syntax
MonoClass* mono_class_from_typeref_checked (MonoImage *image, guint32 type_token, MonoError *error)

Parameters

image | a MonoImage
type_token | a TypeRef token
error | error return code, if any.

Return value
The MonoClass* representing the typeref token, `NULL` if it could not be loaded with the error value filled with the information about the error.
Description

Creates the MonoClass* structure representing the type defined by the typeref token valid inside image.

`mono_class_from_generic_parameter`
Syntax
MonoClass* mono_class_from_generic_parameter (MonoGenericParam *param, MonoImage *arg2 G_GNUC_UNUSED, gboolean arg3 G_GNUC_UNUSED)

Parameters

param | Parameter to find/construct a class for.
arg2 | Is ignored.
arg3 | Is ignored.

### Working with a MonoClass

`mono_class_array_element_size`
Syntax
gint32 mono_class_array_element_size (MonoClass *klass)

Parameters

klass |

Return value
The number of bytes an element of type klass uses when stored into an array.
Description

`mono_class_data_size`
Syntax
gint32 mono_class_data_size (MonoClass *klass)

Parameters

klass | a class

Return value
The size of the static class data
Description

`mono_class_enum_basetype`
Syntax
MonoType* mono_class_enum_basetype (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The underlying type representation for an enumeration.
Description

Use this function to get the underlying type for an enumeration value.

`mono_class_get_byref_type`
Syntax
MonoType* mono_class_get_byref_type (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Description

`mono_class_get_element_class`
Syntax
MonoClass* mono_class_get_element_class (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The element class of an array.
Description

Use this function to get the element class of an array.

`mono_class_get_event_token`
Syntax
mono_class_get_event_token

`mono_class_get_field`
Syntax
MonoClassField* mono_class_get_field (MonoClass *klass, guint32 field_token)

Parameters

class | the class to lookup the field.
field_token | the field token

Return value
A MonoClassField representing the type and offset of the field, or a `NULL` value if the field does not belong to this class.
Description

`mono_class_get_field_token`
Syntax
guint32 mono_class_get_field_token (MonoClassField *field)

Parameters

field | the field we need the token of

Return value
The token representing the field in the image it was loaded from.
Description

Get the token of a field. Note that the tokesn is only valid for the image the field was loaded from. Don't use this function for fields in dynamic types.

`mono_class_get_flags`
Syntax
guint32 mono_class_get_flags (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The flags from the TypeDef table.
Description

The type flags from the TypeDef table from the metadata. see the TYPE_ATTRIBUTE_* definitions on tabledefs.h for the different values.

`mono_class_get_full`
Deprecated: Functions that expose MonoGenericContext are going away in mono 4.0
Syntax
MonoClass* mono_class_get_full (MonoImage *image, guint32 type_token, MonoGenericContext *context)

Parameters

image | the image where the class resides
type_token | the token for the class
context | the generic context used to evaluate generic instantiations in

Return value
The MonoClass that represents type_token in image
Description

`mono_class_get_image`
Syntax
MonoImage* mono_class_get_image (MonoClass *klass)

Return value
The image where this class is defined.
Description

Use this method to get the `MonoImage*` where this class came from.

`mono_class_get_interfaces`
Syntax
MonoClass* mono_class_get_interfaces (MonoClass* klass, gpointer *iter)

Parameters

klass | the MonoClass to act on

Return value
a Monoclass* on each invocation, or `NULL` when no more are available.
Description

This routine is an iterator routine for retrieving the interfaces implemented by this class.

You must pass a gpointer that points to zero and is treated as an opaque handle to iterate over all of the elements. When no more values are available, the return value is `NULL`.

`mono_class_get_name`
Syntax
const char* mono_class_get_name (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The name of the class.
Description

`mono_class_get_namespace`
Syntax
const char* mono_class_get_namespace (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The namespace of the class.
Description

`mono_class_get_nesting_type`
Syntax
MonoClass* mono_class_get_nesting_type (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The container type where this type is nested or `NULL` if this type is not a nested type.
Description

Use this function to obtain the class that the provided `MonoClass*` is nested on.

If the return is `NULL`, this indicates that this class is not nested.

`mono_class_get_parent`
Syntax
MonoClass* mono_class_get_parent (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The parent class for this class.
Description

`mono_class_get_property_token`
Syntax
guint32 mono_class_get_property_token (MonoProperty *prop)

Parameters

prop | MonoProperty to query

Return value
The ECMA token for the specified property.
Description

`mono_class_get_rank`
Syntax
int mono_class_get_rank (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The rank for the array (the number of dimensions).
Description

`mono_class_get_type`
Syntax
MonoType* mono_class_get_type (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The MonoType from the class.
Description

This method returns the internal Type representation for the class.

`mono_class_get_type_token`
Syntax
guint32 mono_class_get_type_token (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The type token for the class.
Description

This method returns type token for the class.

`mono_class_implements_interface`
Syntax
mono_bool mono_class_implements_interface (MonoClass* klass, MonoClass* iface)

Parameters

klass | The MonoClass to act on
interface | The interface to check if klass implements.

Return value
`TRUE` if klass implements interface.
Description

`mono_class_inflate_generic_method`
Syntax
mono_class_inflate_generic_method

`mono_class_inflate_generic_type`
Syntax
mono_class_inflate_generic_type

`mono_class_init`
Syntax
gboolean mono_class_init (MonoClass *klass)

Parameters

class | the class to initialize

Description

Compute the instance_size, class_size and other infos that cannot be computed at mono_class_get() time. Also compute vtable_size if possible. Returns `TRUE` on success or `FALSE` if there was a problem in loading the type (incorrect assemblies, missing assemblies, methods, etc).

LOCKING: Acquires the loader lock.
`mono_class_instance_size`
Syntax
gint32 mono_class_instance_size (MonoClass *klass)

Parameters

klass | a class

Return value
The size of an object instance
Description

Use to get the size of a class in bytes.

`mono_class_is_assignable_from`
Syntax
gboolean mono_class_is_assignable_from (MonoClass *klass, MonoClass *oklass)

Parameters

klass | the class to be assigned to
oklass | the source class

Return value
`TRUE` if an instance of object oklass can be assigned to an instance of object klass
Description

`mono_class_is_delegate`
Syntax
mono_bool mono_class_is_delegate (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
`TRUE` if the MonoClass represents a System.Delegate.
Description

`mono_class_is_enum`
Syntax
gboolean mono_class_is_enum (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
`TRUE` if the MonoClass represents an enumeration.
Description

Use this function to determine if the provided `MonoClass*` represents an enumeration.

`mono_class_is_subclass_of`
Syntax
gboolean mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces)

Parameters

klass | class to probe if it is a subclass of another one
klassc | the class we suspect is the base class
check_interfaces | whether we should perform interface checks

Description

This method determines whether klass is a subclass of klassc.

If the check_interfaces flag is set, then if klassc is an interface this method return `TRUE` if the klass implements the interface or if klass is an interface, if one of its base classes is klass.

If check_interfaces is false then, then if klass is not an interface then it returns `TRUE` if the klass is a subclass of klassc.

if klass is an interface and klassc is System.Object, then this function return true.

`mono_class_is_valuetype`
Syntax
gboolean mono_class_is_valuetype (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
`TRUE` if the MonoClass represents a ValueType, `FALSE` if it represents a reference type.
Description

Use this method to determine if the provided `MonoClass*` represents a value type, or a reference type.

`mono_class_min_align`
Syntax
gint32 mono_class_min_align (MonoClass *klass)

Parameters

klass | a class

Return value
minimm alignment requirements
Description

Use to get the computed minimum alignment requirements for the specified class.

`mono_class_name_from_token`
Syntax
mono_class_name_from_token

`mono_class_num_events`
Syntax
int mono_class_num_events (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The number of events in the class.
Description

`mono_class_num_fields`
Syntax
int mono_class_num_fields (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The number of static and instance fields in the class.
Description

`mono_class_num_methods`
Syntax
int mono_class_num_methods (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The number of methods in the class.
Description

`mono_class_num_properties`
Syntax
int mono_class_num_properties (MonoClass *klass)

Parameters

klass | the MonoClass to act on

Return value
The number of properties in the class.
Description

`mono_class_value_size`
Syntax
gint32 mono_class_value_size (MonoClass *klass, guint32 *align)

Parameters

klass | a class

Return value
the size of a value of kind klass
Description

This function is used for value types, and return the space and the alignment to store that kind of value object.

`mono_class_vtable`
Syntax
MonoVTable* mono_class_vtable (MonoDomain *domain, MonoClass *klass)

Parameters

domain | the application domain
class | the class to initialize

Description

VTables are domain specific because we create domain specific code, and they contain the domain specific static class data. On failure, `NULL` is returned, and class->exception_type is set.

### Getting Class Members

`mono_class_get_fields`
Syntax
MonoClassField* mono_class_get_fields (MonoClass* klass, gpointer *iter)

Parameters

klass | the MonoClass to act on

Return value
a MonoClassField* on each iteration, or `NULL` when no more fields are available.
Description

This routine is an iterator routine for retrieving the fields in a class.

You must pass a gpointer that points to zero and is treated as an opaque handle to iterate over all of the elements. When no more values are available, the return value is `NULL`.

`mono_class_get_field_from_name`
Syntax
MonoClassField* mono_class_get_field_from_name (MonoClass *klass, const char *name)

Parameters

klass | the class to lookup the field.
name | the field name

Return value
The MonoClassField pointer of the named field or `NULL`
Description

Search the class klass and it's parents for a field with the name name.

`mono_class_get_methods`
Syntax
MonoMethod* mono_class_get_methods (MonoClass* klass, gpointer *iter)

Parameters

klass | the MonoClass to act on

Return value
a MonoMethod on each iteration or `NULL` when no more methods are available.
Description

This routine is an iterator routine for retrieving the fields in a class.

You must pass a gpointer that points to zero and is treated as an opaque handle to iterate over all of the elements. When no more values are available, the return value is `NULL`.

`mono_class_get_method_from_name`
Syntax
MonoMethod* mono_class_get_method_from_name (MonoClass *klass, const char *name, int param_count)

Parameters

klass | where to look for the method
name | name of the method
param_count | number of parameters. -1 for any number.

Description

Obtains a MonoMethod with a given name and number of parameters. It only works if there are no multiple signatures for any given method name.
`mono_class_get_method_from_name_flags`
Syntax
MonoMethod* mono_class_get_method_from_name_flags (MonoClass *klass, const char *name, int param_count, int flags)

Parameters

klass | where to look for the method
name_space | name of the method
param_count | number of parameters. -1 for any number.
flags | flags which must be set in the method

Description

Obtains a MonoMethod with a given name and number of parameters. It only works if there are no multiple signatures for any given method name.
`mono_class_get_nested_types`
Syntax
MonoClass* mono_class_get_nested_types (MonoClass* klass, gpointer *iter)

Parameters

klass | the MonoClass to act on

Return value
a Monoclass* on each invocation, or `NULL` when no more are available.
Description

This routine is an iterator routine for retrieving the nested types of a class. This works only if klass is non-generic, or a generic type definition.

You must pass a gpointer that points to zero and is treated as an opaque handle to iterate over all of the elements. When no more values are available, the return value is `NULL`.

`mono_class_get_properties`
Syntax
MonoProperty* mono_class_get_properties (MonoClass* klass, gpointer *iter)

Parameters

klass | the MonoClass to act on

Return value
a MonoProperty* on each invocation, or `NULL` when no more are available.
Description

This routine is an iterator routine for retrieving the properties in a class.

You must pass a gpointer that points to zero and is treated as an opaque handle to iterate over all of the elements. When no more values are available, the return value is `NULL`.

`mono_class_get_property_from_name`
Syntax
MonoProperty* mono_class_get_property_from_name (MonoClass *klass, const char *name)

Parameters

klass | a class
name | name of the property to lookup in the specified class

Return value
the MonoProperty with the given name, or `NULL` if the property does not exist on the klass.
Description

Use this method to lookup a property in a class
`mono_class_get_events`
Syntax
MonoEvent* mono_class_get_events (MonoClass* klass, gpointer *iter)

Parameters

klass | the MonoClass to act on

Return value
a MonoEvent* on each invocation, or `NULL` when no more are available.
Description

This routine is an iterator routine for retrieving the properties in a class.

You must pass a gpointer that points to zero and is treated as an opaque handle to iterate over all of the elements. When no more values are available, the return value is `NULL`.

### Fields

`mono_field_get_data`
Syntax
const char * mono_field_get_data (MonoClassField *field)

Parameters

field | the MonoClassField to act on

Return value
A pointer to the metadata constant value or to the field data if it has an RVA flag.
Description

`mono_field_get_offset`
Syntax
guint32 mono_field_get_offset (MonoClassField *field)

Parameters

field | the MonoClassField to act on

Return value
The field offset.
Description

`mono_field_full_name`
Syntax
char* mono_field_full_name (MonoClassField *field)

Parameters

field | field to retrieve information for

Return value
the full name for the field, made up of the namespace, type name and the field name.
Description

### Method Accessibility

`mono_method_can_access_field`
Syntax
gboolean mono_method_can_access_field (MonoMethod *method, MonoClassField *field)

Parameters

method | Method that will attempt to access the field
field | the field to access

Return value
`TRUE` if the given method is allowed to access the field while following the accessibility rules of the CLI.
Description

Used to determine if a method is allowed to access the specified field.

`mono_method_can_access_method`
Syntax
gboolean mono_method_can_access_method (MonoMethod *method, MonoMethod *called)

Parameters

method | Method that will attempt to access the other method
called | the method that we want to probe for accessibility.

Return value
`TRUE` if the given method is allowed to invoke the called while following the accessibility rules of the CLI.
Description

Used to determine if the method is allowed to access the specified called method.