2010-09-24 5 views
4

Итак, ситуация в том, что у меня есть общий класс C# с именем Foo с параметром шаблона T, который имеет ограничение new(). Я объявил мои занятия что-то вроде этого:C# Generics с параметрами типа IronPython

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>.

Что дает?

ответ

2

Не существует конструктора по умолчанию для объектов IronPython. Им нужно нести какое-то дополнительное изменяемое состояние с ними, тип Python, который должен предоставляться при создании экземпляра класса. Этот тип используется для разрешения любых виртуальных перегрузок и других методов при динамическом вызове.

+0

Ах да, я подумал, что когда я понял, что шаблоны фактически отбрасывают всю информацию типа Python. Спасибо, что подтвердили это. – rfw

+0

Может ли кто-нибудь разработать или мириться с этим примером? Мои знания о внутренней работе python просто не помогают мне перескакивать, что это должно выглядеть в коде. – Gauthier

+1

Я просто попробовал несколько вещей и нашел функцию C# somefunc (string x) {dostuff(); } должно называться somefunc [sometype] ("some string") – Gauthier