Обобщения C# с параметрами типа IronPython
Итак, ситуация у меня есть универсальный класс C# с именем Foo
с параметром шаблона T
который имеет new()
ограничение. Я объявил мои классы примерно так:
class Baz
{
public Baz() { }
}
class Foo<T>
where T : Baz, new()
{
// blah blah
}
И в Python:
class Bar(Baz):
def __init__(self):
""" do various things here """
Однако, если в Python я пытаюсь сделать Foo[Bar]
Я получаю сообщение об ошибке, сообщающее, что мой Bar
класс нарушает ограничения (а именно new()
ограничение) на Foo<T>
,
Что дает?
1 ответ
Решение
Там нет конструктора по умолчанию для объектов IronPython. Они должны нести некоторое дополнительное изменяемое состояние с собой, тип Python, который должен быть предоставлен при создании экземпляра класса. Этот тип используется для разрешения любых виртуальных перегрузок и других методов при динамическом вызове.