-
Notifications
You must be signed in to change notification settings - Fork 747
Working with interfaces
Ben Longo edited this page Apr 10, 2022
·
3 revisions
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)
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