Skip to content

Working with interfaces

Ben Longo edited this page Apr 10, 2022 · 3 revisions

Calling methods of explicitly implemented interfaces

If a class implements an interface explicitly, you will have to "cast" an object to that interface in order to before invoking its methods. Consider the following C# code:

namespace Example {
  interface IExplicit {
    int Add(int a, int b);
  }

  public class ExplicitImpl : IExplicit {
    int IExplicit.Add(int a, int b) {
      return a + b;
    }
  }
}

The following example demonstrates how to call Add:

from Example import IExplicit, ExplicitImpl

impl = ExplicitImpl()

# Wont work:
impl.Add(1, 2)

# Does work:
ifc = IExplicit(impl)
ifc.Add(1, 2)

Extracting the implementation object from an interface object

Python.NET provides two properties for accessing the object implementing the interface:

  • __raw_implementation__ returns the pure CLR object.
  • __implementation__ returns the object after first passing it through Python.NETs encoding/marshalling logic.

This is a way to "cast" from an interface to the implementation class.

Here is an example:

import System
clrVal =  System.Int32(100)
i = System.IComparable(clrVal)
100 == i.__implementation__ # True
clrVal == i.__raw_implementation__ # True