Namespaces
namespace NameSpaceName {
// ...
}
Tudo entre as chaves dessa declaração está no namespace NameSpaceName e precisa ser referênciada como tal.
Qualquer código fora desse namespace deve usar nomes qualificados para qualquer coisa dentro do nome do namespace, ou estar em um arquivo com a declaração using
para importar esse namespace:
using NameSpaceName;
// ...
Por exemplo, se o namespace Gtk é importado com using Gtk;
você pode escrever Window invés de Gtk.Window. Um nome completamente qualificado poderá ser necessário apenas em casos de ambiguidade, por exemplo entre GLib.Object e Gtk.Object.
O namespace GLib é importado por padrão. Imagine uma linha invísivel using GLib;
no ínicio de cada arquivo Vala.
Qualquer coisa que você não colocar em um namespace separado vai incorporar um namespace anónimo global. Se você precisa referenciar o namespace global explicitamente devido a ambiguidade você pode fazer isso com o prefixo global::
.
Namespaces podem ser encadeados, tanto encadeando uma declaração dentro de outra quanto por dar um name na forma Namespace1.NameSpace2.
Diversos outros tipos de definições podem declarar estar dentro de um namespace seguindo a mesma convenção de nomenclatura, ex.
class NameSpace1.Teste { ... }
. Note que fazendo isso, o namespace da definição será o da declaração encadeada mais os namespaces declarados na definição.