Interfaces ​
C#
interface IFoo
{
void Foo(int i);
int Bar(string s, double d);
}
Vala: public abstract
necessary
interface Foo {
public abstract void foo (int i);
public abstract int bar (string s, double d);
}
Why? Because Vala interfaces may have non-abstract methods (i.e. methods with implementations) and private
methods! This means Vala interfaces can be used as mixins (restricted form of multiple inheritance).
'I'-prefix not common in GObject world but allowed
C#: interface inheritance
interface IfaceA
{
void MethodA();
}
interface IfaceB : IfaceA
{
void MethodB();
}
class Demo : IfaceB
{
public void MethodA() { }
public void MethodB() { }
}
Vala: interface prerequisites
interface IfaceA : Object {
public abstract void method_a ();
}
interface IfaceB : Object, IfaceA {
public abstract void method_b ();
}
class Demo : Object, IfaceA, IfaceB {
public void method_a () { }
public void method_b () { }
}
Interfaces in Vala may not inherit from other interfaces, but they may declare other interfaces to be prerequisites, which works in roughly the same way. Interfaces may also have a class as a prerequisite. This is often used to ensure that an instance of an interface is also an Object
subclass. The fact that interfaces can not inherit from other interfaces is mostly only a technical distinction - in practice Vala's system works the same as C# in this area, but with the extra feature of prerequsite classes.