Vala Reference Manual

## Classes

A class is a data type that can contain fields, constants, methods, properties, and signals. Class types support inheritance, a mechanism whereby a derived class can extend and specialize a base class.

### Class declarations

The simplest class declaration looks like this:

    class ClassName {
    	<class-member>
    }

As class types support inheritance, you can specify a base class you want to derive from:

    class ClassName : BaseClassName {
    	<class-member>
    }

#### GObject Note

It's recommended that you derive all your classes directly or indirectly from GLib.Object, unless you have a strong reason not to. Some class features are not supported for classes not deriving from GLib.Object.

Classes cannot have multiple base classes, however they may implement multiple interfaces:

    class ClassName : BaseClassName, FirstInterfaceName, SecondInterfaceName {
    	<class-member>
    }

You may optionally specify an accessibility modifier. Classes support `public` and `private` accessibility and default to private if you don't specify one. Public classes may be accessed from outside the library or application they are defined in.

    public class ClassName {
    	<class-member>
    }

The `abstract` modifier may be placed between the optional accessibility modifier and the class name to define an abstract class. An abstract class cannot be instantiated and is used as a base class for derived classes.

    abstract class ClassName {
    	<class-member>
    }

The `static` modifier may be placed between the optional accessibility modifier and the class name to define a static class. A static class cannot be instantiated and may not have a base class. It can also not be used as a base class for derived classes and may only contain static members. Static classes are implicitly abstract, you may not use both modifiers, `abstract` and `static`, in the same class declaration.

    static class ClassName {
    	<class-member>
    }

You may optionally prefix the class name with a namespace name. This places the class in the specified namespace without the need for a separate namespace declaration.

    class NamespaceName.ClassName {
    	<class-member>
    }

### Fields

Documentation

### Methods

Documentation

### Properties

> property-declaration: [ access-modifier ] [ member-modifiers ] type identifier { accessor-declarations [ default-value ] } ; accessor-declarations: get-accessor [ set-accessor ] set-accessor [ get-accessor ] get-accessor: [ access-modifier ] get ; [ access-modifier ] get { statement-list } set-accessor: [ access-modifier ] set [ construct ] ; [ access-modifier ] set [ construct ] { statement-list } default-value: default = expression ;

### Signals

The signal system allows objects to emit signals that can be handled by user-provided signal handlers.

> signal-declaration: [ access-modifier ] signal return-type identifier ( [ parameter-list ] ) ;