I have an interface defined in C# that I would like to implement in IronPython 0.7.5. Similar code works in Jython. The interface looks like:
public interface IDocumentChangeListener { void StateAltered(); void InvalidateAll(); void InvalidateRange(int a, int b); }; Trying to implement the interface in IronPython like this fails: class IDCLForward(IDocumentChangeListener): def __init__(self, form): self.form = form def StateAltered(self): print "IDCL altered" self.form.StateAltered() # ... with a trace: System.ArgumentException: Parent type was not extensible by the given type. at System.Reflection.Emit.TypeBuilder.SetParent(Type parent) at IronPython.AST.NewTypeMaker.CreateNewType() at IronPython.AST.NewTypeMaker.GetNewType(String mod, String name, Tuple bases, IDictionary`2 dict) at IronPython.Objects.UserType..ctor(String mod, String name, Tuple bases, IDictionary`2 dict) at IronPython.Objects.Ops.MakeClass(String mod, String name, Tuple bases, IDictionary`2 vars) at __main__.Initialize() in C:\os\sinkworld\tentacle\csharp\TentacleP.py:line 24 ... ======================================== Sliding in a concrete C# class between the interface and IronPython class helps avoid stack traces but does not lead to the IronPython class being called. public class IDCL : IDocumentChangeListener { public IDCL() { } public virtual void StateAltered() { Console.Error.WriteLine("StateAltered"); } public virtual void InvalidateAll() { Console.Error.WriteLine("InvalidateAll"); } public virtual void InvalidateRange(int a, int b) { Console.Error.WriteLine("InvalidateRange"); } }; class IDCLForward(IDCL): def __init__(self, form): self.form = form ======================================== Jython likes to have the interface __init__ed but this also upsets IronPython. class IDCLForward(IDCL): def __init__(self, form): IDCL.__init__(self) self.form = form IronPython.Objects.PythonAttributeError: type object 'SinkWorld.IDCL' has no attribute '__init__' at IronPython.Objects.Ops.GetAttr(Object o, String name) at __main__.__init__$f0(Object self, Object form) in C:\os\sinkworld\tentacle\csharp\TentacleP.py:line 26 ======================================== What should I do to make this work? Neil _______________________________________________ users-ironpython.com mailing list users-ironpython.com@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com