为什么.Net Framework基类型不包含IConvertible方法的实现?
.Net Framework基类型,如Int32,Int64,Boolean等。 实现IConvertible接口,但这些类型的元数据不包含IConvertible接口中定义的方法的实现,如ToByte,ToBoolean等。
我试图理解为什么基类型没有方法实现,即使它们实现了IConvertible接口。 有人可以帮忙吗?
仔细看看文档 IConvertible
显式实现了IConvertible
。
当类/结构体显式实现接口时,必须在调用这些方法之前将该类型的实例强制转换为其接口
var asConvertable = (IConvertible) 3; //boxing var someByte = asConvertible.ToByte();
Int32
和其他基本类型显式实现IConvertible
接口。 显式接口实现意味着该方法不会出现在具体的类型公共方法中:您无法直接调用它,您需要先将其强制转换为接口。
int x = 42; IConvertible c = (IConvertible)x; byte b = c.ToByte();
要显式实现接口,请不要指定可访问性级别,并在方法名称前面加上接口名称:
byte IConvertible.ToByte() { ... }
要使用reflection访问方法,必须包含接口的全名:
MethodInfo toByte = typeof(int).GetMethod("System.IConvertible.ToByte", BindingFlags.Instance | BindingFlags.NonPublic);