Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 512
Raji Avatar asked Dec 20 '22 09:12

Raji


2 Answers

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();
like image 144
dcastro Avatar answered Jan 12 '23 00:01

dcastro


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);
like image 30
Thomas Levesque Avatar answered Jan 12 '23 00:01

Thomas Levesque