[IronPython] op_Implicit - workarounds to avoid C# code?

Giles Thomas giles.thomas at resolversystems.com
Wed Jul 4 21:27:34 CEST 2007

Hi all,

I am working with a C# library that has two classes with no inheritance 
relationship, Class1 and Class2, where Class2 has an op_Implicit that 
allows you to construct an instance of it from an instance of Class1.   
In the same library there is a method Class3.TheMethod, which takes an 
instance of Class2.  There is C# code for this below.

I have an instance of Class1, c1, and I want to be able to call it in 
IronPython with an instance of Class2 that has been created using the 
op_Implicit; C# code that does this is also below.

So far I've had no luck; I understand that op_Implicit isn't very well 
supported in IP currently, but any workarounds that avoid having to drop 
into C# would be much appreciated.

I've tried getting it to work two ways - again, IP code is below:

    * Doing it directly with C3.TheMethod(c1) just says "expected
      Class2, got Class1", as you would expect.
    * Trying the trick that Dino Viehland suggested on 22 June, which
      involves putting the instance into a generic list parameterised to
      hold instances of Class2 just moves the problem to the call to

Am I missing something?  If not, can anyone think of any other 
workarounds?  Or am I just going to have to grit my teeth and drop into 



Giles Thomas
giles.thomas at resolversystems.com
+44 (0) 20 7253 6372

Resolver Systems Ltd
17a Clerkenwell Road, London EC1M 5RD, UK
VAT No.: GB 893 5643 79 
Registered in England and Wales as company number 5467329.
Registered address: 843 Finchley Road, London NW11 8NA, UK

C# library code:

namespace OpImplicitTest
    public class Class1
        public int value;
        public Class1(int value)
            this.value = value;

    public class Class2
        public int otherValue;

        private Class2(int value)
            this.otherValue = value;

        public static implicit operator Class2(Class1 c)
            return new Class2(c.value);

    public class Class3
        public void TheMethod(Class2 c2)


C# library code:

            Class1 c1 = new Class1(23);
            Class3 c3 = new Class3();

IP code

import clr
from OpImplicitTest import Class1, Class2, Class3
c3 = Class3()
c1 = Class1(23)

# Try calling it directly as per the C# - this blows up

# Try Dino's workaround...
from System.Collections.Generic import List
l = List[Class2]()
# ...and this blows up.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20070704/4cb65c52/attachment.html>

More information about the Ironpython-users mailing list