Есть ли поддержка смеси параметрического и подтипного полиморфизма с ограничениями в Vala? - PullRequest
1 голос
/ 22 мая 2019

Одна из моих любимых функций в C # - это возможность смешивать параметрический и подтипный полиморфизм (Generics и наследование).Но я не могу найти какую-либо документацию для Валы, в которой говорилось бы, что это доступно, или в каких-либо дискуссиях о том, что это недоступно или ожидается.Может ли кто-нибудь дать мне точный ответ, а источник, который говорит, что это так, не доступен или не будет доступен в будущем?*

1 Ответ

1 голос
/ 22 мая 2019

С небольшими изменениями ваш пример кода компилируется с помощью 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, поэтому вы заметите некоторые ограничения параметрического полиморфизма, особенно при использовании обобщенных типов с необнуляемыми типами значений.

Я не могу комментировать дисперсию (ковариацию и контравариантность) и то, как это обрабатывается.

...