Inheritance Vala中是否支持参数多态性和子类型多态性与约束的混合?

Inheritance Vala中是否支持参数多态性和子类型多态性与约束的混合?,inheritance,vala,parametric-polymorphism,Inheritance,Vala,Parametric Polymorphism,我个人最喜欢的C#特性之一是能够混合参数多态性和子类型多态性(泛型和继承)。但我找不到任何关于Vala的文件说明这是可用的,或者任何讨论说这是不可用的或即将到来的。有人能给我一个明确的答案吗?有消息称,答案是肯定的,现在是肯定的,将来也会是肯定的 为了简单说明我的意思,以防出现任何混淆: namespace Animals { public interface Animal{ void say_something(); } public abstract

我个人最喜欢的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{
    }
}
名称空间动物
{
公共界面动物{
不要说什么;
}
公开摘要类犬:动物{
公共空间说些什么{
stdout.printf(“Woof!”);
}
}
公共界面动物专家T:动物{
}
公共接口狗专家:动物专家T:狗{
}
}

只需做一些小改动,您的示例代码就可以用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> {
    }
}
名称空间动物
{
公共界面动物{
公开的抽象的无效的说某事;
}
公开摘要类犬:动物{
公共空间说些什么{
stdout.printf(“Woof!”);
}
}
公共界面动物专家{
}
公共界面专家:动物专家{
}
}
Vala不支持的一件事是类型参数约束(
where T…

除此之外,还支持参数多态性和子类型多态性

需要始终牢记的一点是,Vala代码直接转换为C代码,因此您会注意到参数化多态性存在一些限制,特别是在使用不可为null的值类型的泛型时


我无法评论方差(协方差和逆变)及其处理方法。

虽然你的答案很好,但我知道bit是可能的。我可能不太清楚的是:约束部分特别有趣:)问题是:没有约束,动物专家不知道t可以做什么:
say_something()
而且DogSpecialist不知道所有犬科动物之间共享的是什么任意的东西。拥有它会很好,这里有一个问题有待解决:它可能是重复的。我只是没认出它,因为我记不起它的名字