## EExtension EExtension — An abstract base class for extensions |

## Functions

EExtensible * | e_extension_get_extensible ()

## Types and Values

struct | EExtension
struct | EExtensionClass

## Includes

    #include <libedataserver/libedataserver.h>

## Description

EExtension provides a way to extend the functionality of objects that implement the EExtensible interface. EExtension subclasses can target a particular extensible object type. New instances of an extensible object type get paired with a new instance of each EExtension subclass that targets the extensible object type.

The first steps of writing a new extension are as follows:

1. Subclass EExtension.

2. In the class initialization function, specify the GType being extended. The GType must implement the EExtensible interface.

3. Register the extension's own GType. If the extension is to be loaded dynamically using GTypeModule, the type should be registered in the library module's `e_module_load()` function.

## Functions

### e_extension_get_extensible ()

    EExtensible *
    e_extension_get_extensible (EExtension *extension);

Returns the object that `extension` extends.

#### Parameters

extension | an EExtension |

#### Returns

the object being extended.

[transfer none]

Since: 3.4

## Types and Values

### struct EExtension

    struct EExtension {
    	GObject parent;
    	EExtensionPrivate *priv;
    };

Contains only private data that should be read and manipulated using the functions below.

Since: 3.4

### struct EExtensionClass

    struct EExtensionClass {
    	GObjectClass parent_class;

    	/* The type to extend. */
    	GType extensible_type;
    };