Why does .Net Framework base types do not contain implementations of IConvertible methods?

406 views Asked by At

.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?

2

There are 2 answers

2
dcastro On BEST ANSWER

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();
0
Thomas Levesque On

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);