.Net Framework base types such as Int32, Int64, Boolean etc,. implement IConvertible interface but the metadata of these types do not contain the implementations of the methods defined in IConvertible interface such as ToByte, ToBoolean etc,.
I am trying to understand why the base types do not have the method implementations even though they implements IConvertible interface. Could anyone please help on this?
Take a closer look at the documentation - Int32
implements IConvertible
explicitly.
When a class/struct implements an interface explicitly, you have to cast instances of that type to its interface before calling those methods
var asConvertable = (IConvertible) 3; //boxing
var someByte = asConvertible.ToByte();
Int32
and other primitive types implement the IConvertible
interface explicitly. Explicit interface implementation means that the method doesn't appear in the concrete's type public methods: you can't call it directly, you need to cast to the interface first.
int x = 42;
IConvertible c = (IConvertible)x;
byte b = c.ToByte();
To implement an interface explicitly, you don't specify an accessibility level, and you prefix the method name with the interface name:
byte IConvertible.ToByte()
{
...
}
To access the method with reflection, you must include the full name of the interface:
MethodInfo toByte =
typeof(int).GetMethod("System.IConvertible.ToByte",
BindingFlags.Instance | BindingFlags.NonPublic);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With