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