### Class

# GObject ParamSpec

since: 2.0

#### Description

    abstract class GObject.ParamSpec : GObject.TypeInstance
    {
      name: const gchar*,
      flags: GParamFlags,
      value_type: GType,
      owner_type: GType
    }

`GParamSpec` encapsulates the metadata required to specify parameters, such as `GObject` properties.

## Parameter names

A property name consists of one or more segments consisting of ASCII letters and digits, separated by either the `-` or `_` character. The first character of a property name must be a letter. These are the same rules as for signal naming (see `g_signal_new()`).

When creating and looking up a `GParamSpec`, either separator can be used, but they cannot be mixed. Using `-` is considerably more efficient, and is the ‘canonical form’. Using `_` is discouraged.

Available since: 2.0

#### Descendants

- GParamSpecBoolean
- GParamSpecBoxed
- GParamSpecChar
- GParamSpecDouble
- GParamSpecEnum
- GParamSpecFlags
- GParamSpecFloat
- GParamSpecGType
- GParamSpecInt
- GParamSpecInt64
- GParamSpecLong
- GParamSpecObject
- GParamSpecOverride
- GParamSpecParam
- GParamSpecPointer
- GParamSpecString
- GParamSpecUChar
- GParamSpecUInt
- GParamSpecUInt64
- GParamSpecULong
- GParamSpecUnichar
- GParamSpecValueArray
- GParamSpecVariant

#### Functions

###### g_param_spec_internal

Creates a new `GParamSpec` instance.

since: 2.0

###### g_param_spec_is_valid_name

Validate a property name for a `GParamSpec`. This can be useful for dynamically-generated properties which need to be validated at run-time before actually trying to create them.

since: 2.66

#### Instance methods

###### g_param_spec_get_blurb

Get the short description of a `GParamSpec`.

since: 2.0

###### g_param_spec_get_default_value

Gets the default value of `pspec` as a pointer to a `GValue`.

since: 2.38

###### g_param_spec_get_name

Get the name of a `GParamSpec`.

since: 2.0

###### g_param_spec_get_name_quark

Gets the GQuark for the name.

since: 2.46

###### g_param_spec_get_nick

Get the nickname of a `GParamSpec`.

since: 2.0

###### g_param_spec_get_qdata

Gets back user data pointers stored via g_param_spec_set_qdata().

since: 2.0

###### g_param_spec_get_redirect_target

If the paramspec redirects operations to another paramspec, returns that paramspec. Redirect is used typically for providing a new implementation of a property in a derived type while preserving all the properties from the parent type. Redirection is established by creating a property of type `GParamSpecOverride`. See `g_object_class_override_property()` for an example of the use of this capability.

since: 2.4

###### g_param_spec_ref

Increments the reference count of `pspec`.

since: 2.0

###### g_param_spec_ref_sink

Convenience function to ref and sink a `GParamSpec`.

since: 2.10

###### g_param_spec_set_qdata

Sets an opaque, named pointer on a `GParamSpec`. The name is specified through a `GQuark` (retrieved e.g. via g_quark_from_static_string()), and the pointer can be gotten back from the `pspec` with g_param_spec_get_qdata(). Setting a previously set user data pointer, overrides (frees) the old pointer set, using `NULL` as pointer essentially removes the data stored.

since: 2.0

###### g_param_spec_set_qdata_full

This function works like g_param_spec_set_qdata(), but in addition, a `void (*destroy) (gpointer)` function may be specified which is called with `data` as argument when the `pspec` is finalized, or the data is being overwritten by a call to `g_param_spec_set_qdata()` with the same `quark`.

since: 2.0

###### g_param_spec_sink

The initial reference count of a newly created `GParamSpec` is 1, even though no one has explicitly called `g_param_spec_ref()` on it yet. So the initial reference count is flagged as “floating”, until someone calls `g_param_spec_ref (pspec); g_param_spec_sink (pspec);` in sequence on it, taking over the initial reference count (thus ending up with a `pspec` that has a reference count of 1 still, but is not flagged “floating” anymore).

since: 2.0

###### g_param_spec_steal_qdata

Gets back user data pointers stored via `g_param_spec_set_qdata()` and removes the `data` from `pspec` without invoking its `destroy()` function (if any was set). Usually, calling this function is only required to update user data pointers with a destroy notifier.

since: 2.0

###### g_param_spec_unref

Decrements the reference count of a `pspec`.

since: 2.0

#### Class structure

    struct GObjectParamSpecClass {
      GTypeClass g_type_class;
      GType value_type;
      void (* finalize) (
        GParamSpec* pspec
      );
      void (* value_set_default) (
        GParamSpec* pspec,
        GValue* value
      );
      gboolean (* value_validate) (
        GParamSpec* pspec,
        GValue* value
      );
      gint (* values_cmp) (
        GParamSpec* pspec,
        const GValue* value1,
        const GValue* value2
      );
      gboolean (* value_is_valid) (
        GParamSpec* pspec,
        const GValue* value
      );

    }

The class structure for the GParamSpec type. Normally, GParamSpec classes are filled by g_param_type_register_static().

###### Class members

`g_type_class: GTypeClass`

  The parent class.

`value_type: GType`

  The `GValue` type for this parameter.

`finalize: void (* finalize) ( GParamSpec* pspec )`

  The instance finalization function (optional), should chain up to the finalize method of the parent class.

`value_set_default: void (* value_set_default) ( GParamSpec* pspec, GValue* value )`

  Resets a `value` to the default value for this type (recommended, the default is g_value_reset()), see g_param_value_set_default().

`value_validate: gboolean (* value_validate) ( GParamSpec* pspec, GValue* value )`

  Ensures that the contents of `value` comply with the specifications set out by this type (optional), see g_param_value_validate().

`values_cmp: gint (* values_cmp) ( GParamSpec* pspec, const GValue* value1, const GValue* value2 )`

  Compares `value1` with `value2` according to this type (recommended, the default is memcmp()), see g_param_values_cmp().

`value_is_valid: gboolean (* value_is_valid) ( GParamSpec* pspec, const GValue* value )`

  Checks if contents of `value` comply with the specifications set out by this type, without modifying the value. This vfunc is optional. If it isn’t set, GObject will use `value_validate`. Since 2.74

#### Virtual methods

###### GObject.ParamSpecClass.finalize

The instance finalization function (optional), should chain up to the finalize method of the parent class.

since: 2.0

###### GObject.ParamSpecClass.value_is_valid

Checks if contents of `value` comply with the specifications set out by this type, without modifying the value. This vfunc is optional. If it isn’t set, GObject will use `value_validate`. Since 2.74

since: 2.0

###### GObject.ParamSpecClass.value_set_default

Resets a `value` to the default value for this type (recommended, the default is g_value_reset()), see g_param_value_set_default().

since: 2.0

###### GObject.ParamSpecClass.value_validate

Ensures that the contents of `value` comply with the specifications set out by this type (optional), see g_param_value_validate().

since: 2.0

###### GObject.ParamSpecClass.values_cmp

Compares `value1` with `value2` according to this type (recommended, the default is memcmp()), see g_param_values_cmp().

since: 2.0