Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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

Clone this wiki locally

Morty Proxy This is a proxified and sanitized view of the page, visit original site.