Signals are only available to GObject classes. They can only be public, which means that any part of the code can connect handlers and trigger them.
public class Emitter : Object { // A signal is declared like a method, // but with the signal keyword. public signal void my_signal (); public void send_signal () { this.my_signal (); // Send a signal by calling it like a method. } } void main () { var emitter = new Emitter (); // Use the connect method of the signal to add an handler. emitter.my_signal.connect (() => { print ("Received the signal.\n"); }); emitter.send_signal (); emitter.my_signal (); // You can send a signal from anywhere. } You can also use normal functions as handlers if they have the same signature as the signal.
void main () { var emitter = new Emitter (); emitter.connect (my_handler); emitter.my_signal (); } void my_handler () { print ("Received the signal.\n"); }