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 ] ) ;