我个人最喜欢的C#功能之一是能够混合参数和子类型多态性(泛型和继承)。但是我找不到任何有关Vala的文档,指出有可用的文档,也没有任何讨论表明此文档不可用或即将发布。谁能给我一个明确的答案,而有消息说它将来是否可用,或者将来可用吗?
举一个简短的例子说明我的意思,以防万一:
namespace Animals
{
public interface Animal{
void say_something();
}
public abstract class Canine : Animal{
public void say_something(){
stdout.printf("Woof!");
}
}
public interface AnimalSpecialist<T> where T : Animal{
}
public interface DogSpecialist<T> : AnimalSpecialist<T> where T : Canine{
}
}
答案 0 :(得分:1)
进行一些小的更改,您的示例代码将使用valac编译。
namespace Animals
{
public interface Animal {
public abstract void say_something();
}
public abstract class Canine : Animal {
public void say_something(){
stdout.printf("Woof!");
}
}
public interface AnimalSpecialist<T> {
}
public interface DogSpecialist<T> : AnimalSpecialist<T> {
}
}
Vala不支持的一件事是类型参数约束(where T …
)。
除了支持参数多态性和子类型多态性。
要牢记的一件事是,将Vala代码直接转换为C代码,因此您会注意到对参数多态性有一些限制,尤其是在使用具有非可空值类型的泛型时。
我无法评论方差(协方差和逆方差)及其处理方式。